Open source client/server software for creating shared VR environments. Docs at We are hiring: Also, PT work available at
Latest commit be23d07 Sep 24, 2018
Failed to load latest commit information.
android Fix qt build (osx) file version Sep 13, 2018
assignment-client Revert "Revert "Merge branch 'master' into fixGoToButtonInterstitial"" Sep 14, 2018
cmake Remove cmake spam Sep 6, 2018
domain-server always remove old socket-matching node before add Aug 24, 2018
gvr-interface Fix non self-sufficient headers May 4, 2018
ice-server Store big web requests on disk May 25, 2018
interface Merge pull request #14010 from sethalves/thread-safe-settings Sep 25, 2018
libraries Merge pull request #14010 from sethalves/thread-safe-settings Sep 25, 2018
plugins Shader refactoring for explicit bindings Aug 3, 2018
script-archive Merge pull request #12906 from Triplelexx/21794_move_inspect May 21, 2018
scripts Merge pull request #14008 from sethalves/fix-local-angular-velocity Sep 24, 2018
server-console Change sys-tray Sandbox menu item from Go Home to Visit Sandbox Jul 18, 2018
tests-manual Trying to simplify the LOD culling test Aug 24, 2018
tests Fail unit test on non-compiling pipelines Sep 6, 2018
tools Merge pull request #13632 from Atlante45/fix/udt-rtt Aug 16, 2018
unpublishedScripts Merge pull request #13583 from zfox23/specCamBumpVersion Jul 11, 2018
.clang-format Update clang-format ctor initializer list format Feb 22, 2018
.editorconfig adjust indentation and implement editorconfig at root of repo Nov 29, 2016
.eslintrc.js web-scripting globals May 15, 2018
.gitattributes New android toolchain Sep 19, 2017
.gitignore add JSDoc package lock json to gitignore Apr 4, 2018 Added additional export QT_CMAKE_PREFIX_PATH related to Sep 3, 2018 cleanup, don't compress rcc file to fix corruption Mar 12, 2018 Corrected interferace to interface Sep 3, 2018 Fix formatting Jan 19, 2018 Update docs with correct qt version Apr 12, 2018 Update Jul 5, 2018
CMakeGraphvizOptions.cmake Trying to fix QtQml/QtScript crashes Jun 22, 2017
CMakeLists.txt Shader refactoring for explicit bindings Aug 3, 2018 Update Jul 20, 2017 Assign a Win 'appUserModelId' and use it for toaster popups (notifica… May 24, 2018
LICENSE update LICENSE to include "and other platform" May 16, 2016 Improve punctuation on Jul 5, 2018

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

This repository contains the source to many of the components in our alpha-stage virtual world. The project embraces distributed development. 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).

There is also detailed documentation on our coding standards.

Contributor License Agreement (CLA)

Technology companies frequently receive and use code from contributors outside the company's development team. Outside code can be a tremendous resource, but it also carries responsibility. Best practice for accepting outside contributions consists of an Apache-type Contributor License Agreement (CLA). We have modeled the High Fidelity CLA after the CLA that Google presents to developers for contributions to their projects. This CLA does not transfer ownership of code, instead simply granting a non-exclusive right for High Fidelity to use the code you’ve contributed. In that regard, you should be sure you have permission if the work relates to or uses the resources of a company that you work for. You will be asked to sign our CLA when you create your first PR or when the CLA is updated. You can also review it here. We sincerely appreciate your contribution and efforts toward the success of the platform.

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 down. If you're experiencing a major bug, let us know by adding an issue to this repository. Include details about your computer and how to reproduce the bug in your issue.

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 need 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!