Open source client/server software for creating shared VR environments. Docs at We are hiring: Also, PT work available at
C++ JavaScript C QML HTML CMake Other
Latest commit e723385 Feb 23, 2017 @cozza13 cozza13 committed on GitHub Merge pull request #9726 from ZappoMan/avatarBandwidthBudgetImprovements
Avatar bandwidth budget improvements
Failed to load latest commit information.
assignment-client clean up some uneedded nullptr checks, make them asserts Feb 23, 2017
cmake Fix for memory-leak in Windows audio stack (audiodg.exe grows without… Jan 30, 2017
domain-server Merge branch 'master' of into av… Feb 17, 2017
gvr-interface initial changes needed for android interface cmake Aug 31, 2016
ice-server Logging improvements Nov 4, 2016
interface Merge branch 'master' of into av… Feb 23, 2017
libraries Merge branch 'master' of into av… Feb 23, 2017
plugins Merge pull request #9615 from kencooke/audio-packetloss-fix Feb 6, 2017
script-archive add faye's displayLastEditedBy script Feb 13, 2017
scripts Merge branch 'master' of into av… Feb 23, 2017
server-console update AC monitor to launch 7 ACs Jan 20, 2017
tests Fix for findEntities not returning some entities that are within range. Feb 6, 2017
tools fix a crash and a memory leak in vhacd-util Dec 23, 2016
tutorial Add disabling of avatar and object scaling during tutorial Dec 21, 2016
unpublishedScripts Update stopwatch to use relative paths to models + sounds Feb 8, 2017
.editorconfig adjust indentation and implement editorconfig at root of repo Nov 29, 2016
.eslintrc.js updated eslint to include Tablet global Feb 17, 2017
.gitattributes make the rsrc icon a binary Jan 20, 2016
.gitignore add release/debug/gprof/valgrind to gitignore Nov 27, 2016 change build guide to suggest latest of OpenSSL Feb 13, 2017 update ndk version in BUILD_ANDROID Sep 1, 2016 Fix: Jan 8, 2017 updated build instructions to use official qt release instead of home… Sep 7, 2016 updated build instructions Sep 7, 2016
CMakeGraphvizOptions.cmake Support QML and Web content in overlay windows Dec 30, 2015
CMakeLists.txt GLM update and GLI integration Sep 9, 2016 fix accidentally violated style rule Apr 4, 2016 use backticks for CMAKE_INSTALL_PREFIX` Jan 20, 2016
LICENSE update LICENSE to include "and other platform" May 16, 2016 Readme fix, default AC parameters example Feb 1, 2017

High Fidelity (hifi) is an early-stage technology lab experimenting with Virtual Worlds and VR.

In this repository you'll find the source to many of the components in our alpha-stage virtual world. The project embraces distributed development and if you'd like to help, we'll pay you -- find out more at If you find a small bug and have a fix, pull requests are welcome. If you'd like to get paid for your work, make sure you report the bug via a job on

We're hiring! We're looking for skilled developers; send your resume to

Chat with us

Come chat with us in our Gitter if you have any questions or just want to say hi!


Documentation is available at, if something is missing, please suggest it via a new job on Worklist (add to the hifi-docs project).

Build Instructions

All information required to build is found in the build guide.

Running Interface

When you launch interface, you will automatically connect to our default domain: "".

If you don't see anything, make sure your preferences are pointing to (set your domain via Cmnd+D/Cntrl+D), if you still have no luck it's possible our servers are simply down; if you're experiencing a major bug, let us know by adding an issue to this repository. Make sure to include details about your computer and how to reproduce the bug.

To move around in-world, use the arrow keys (and Shift + up/down to fly up or down) or W A S D, and E or C to fly up/down. All of the other possible options and features are available via menus in the Interface application.

Running your own servers

The assignment-client and domain-server are architectural components that will allow you to run the full stack of the virtual world.

In order to set up your own virtual world, you need to set up and run your own local "domain".

The domain-server gives a number different types of assignments to the assignment-client for different features: audio, avatars, voxels, particles, meta-voxels and models.

Follow the instructions in the build guide to build the various components.

From the domain-server build directory, launch a domain-server.


Then, run an assignment-client. The assignment-client uses localhost as its assignment-server and talks to it on port 40102 (the default domain-server port).

In a new Terminal window, run:


Any target can be terminated with Ctrl-C (SIGINT) in the associated Terminal window.

This assignment-client will grab one assignment from the domain-server. You can tell the assignment-client what type you want it to be with the -t option. You can also run an assignment-client that forks off n assignment-clients with the -n option. The -min and -max options allow you to set a range of required assignment-clients, this allows you to have flexibility in the number of assignment-clients that are running. See --help for more options.

./assignment-client --min 6 --max 20

To test things out you'll want to run the Interface client.

To access your local domain in Interface, open your Preferences -- on OS X this is available in the Interface menu, on Linux you'll find it in the File menu. Enter "localhost" in the "Domain server" field.

If everything worked you should see that you are connected to at least one server. Nice work!