Experimental virtual world platform based off Godot, with federation support. Heavily inspired by VRChat.
  • JavaScript 43.2%
  • GDScript 39.1%
  • HTML 13.9%
  • GDShader 2.2%
  • CSS 1.4%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-01 15:44:18 +02:00
.idea Separated movement part of player_controller into separate node/script for better maintainability. 2026-06-30 14:13:53 +03:00
addons Added new plans. 2026-09-26 23:38:30 +03:00
InternalResources Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00
InternalScenes Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00
InternalScripts Implemented independent hold of objects (a.k.a. you now can hold both objects in VR at the same time). 2026-08-23 17:34:11 +03:00
samples/godot_whisper Initial Whisper implementation (based off https://github.com/appsinacup/godot-whisper, which uses whisper.cpp internally). 2026-06-08 12:41:57 +03:00
.editorconfig Initial commit 2025-05-26 13:42:50 +03:00
.gitattributes Initial commit 2025-05-26 13:42:50 +03:00
.gitignore Initial commit 2025-05-26 13:42:50 +03:00
aimCursor.kra Initial commit 2025-05-26 13:42:50 +03:00
aimCursor.kra~ Initial commit 2025-05-26 13:42:50 +03:00
aimCursor.png~ Initial commit 2025-05-26 13:42:50 +03:00
base.tres Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00
CSGStairMaker3D.tscn Added stairs to test (built-in) map, also binded noclip to n button 2026-06-22 22:18:45 +03:00
default_bus_layout.tres Initial Whisper implementation (based off https://github.com/appsinacup/godot-whisper, which uses whisper.cpp internally). 2026-06-08 12:41:57 +03:00
export_presets.cfg Last commit before another attempt to get rid of unused LFS 2026-07-09 10:20:32 +03:00
icon.svg Initial commit 2025-05-26 13:42:50 +03:00
icon.svg.import Upgraded twovoip to newer version, which fixes internal bug, which caused choppy audio. Also returned 2 opus channels, for compatibility (and it didn't affect choppiness after all). 2026-01-13 13:54:54 +02:00
kanban_tasks_data.kanban Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00
LICENSE Added LICENSE. 2025-08-17 18:10:43 +03:00
openxr_action_map.tres Version bump, upgraded base engine to v4.6 and twovoip library (which now accesses audio buffer directly thanks to new method in 4.6) 2025-12-21 18:21:44 +02:00
project.godot Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00
README.md I didn't test HoloFed for a long time, Whisper-based STT in particular. If it sucks without reasonable way to make it good enough without risking rest of HoloFed (perfomance), STT will be removed. 2026-10-21 00:05:09 +03:00
TestInteract.gd Initial commit 2025-05-26 13:42:50 +03:00
TestInteract.gd.uid Initial commit 2025-05-26 13:42:50 +03:00
TestScene.tscn Some work on global theme, edited tasks 2026-11-01 15:44:18 +02:00

Holofed Godot client/server

This is main part of Holofed project - experimental virtual world platform, which wants to be as libre as possible (that's why I picked Godot as game engine) and have ActivityPub-based federation support.

WARNING!

Although master server part has encryption support via HTTPS (depending by WSGI server) and PGP (latter required by ActivityPub), game server is only partially protected. ENet UPD (used for actual multiplayer) is protected with DTLS (enabled by default), but HTTP TCP (used for map serving) is not. MITM attacks are still possible while downloading the map. You have been warned.

You can also provide custom key and certificate by placing custom.key and custom.crt into %godot_user_folder%/cert. Both files have to be present, otherwise server will generate self-signed key and certificate for the time of hosting the instance.

As of now, scripts in both avatars and maps are loaded "as is". Untrusted scripts are effectively sub-programs, and they can do nasty things! Some sort of sandbox may be implemented in the future.

Unless you're on Windows or Linux, login token is stored in plain text inside user folder. While it's okay on Android and (potentially) visionOS (iOS), it's extemely insecure on MacOS or Web (although latter two have limited or no support).

Also it's mostly WIP (Work In Progress), and mostly only core features are implemented. It's being done in my spare time, amount of which is unstable.

If you're on Linux, ffmpeg must be installed system-wide to make playing videos possible from Youtube, Vimeo, PeerTube etc.

Currently implemented

  • basic desktop/VR locomotion (WASD/left controller stick for movement, Space/right controller X to jump, mouse to turn around, right controller sitck for snap turning)

  • VoIP (V/left controller A to toggle mute)

  • Basic object interact (E/controller trigger to interact)

  • Basic object grab (E/controller grip to toggle grab)

  • Downloading map from the server (with MD5 and name checks to download only when needed)

  • Connection to master server (instance browser, optional login to access non-public instances, creating instances)

  • Direct connect (allows to use this part as standalone program)

  • CLI launch parameters (custom ones along side Godot ones, used primarily by master server to launch instance in dedicated mode)

  • Offline viewer mode (launched with --viewer argument or from "Browse local maps" button in login screen). On Web build, it's the only mode available

  • Encryption of game server (DTLS)

  • Automatic forward ports with UPnP

  • Avatar system (7 built-in ones + ability to load custom ones from Relay)

  • Basic support for standalone VR Android headsets (such as Quest, Pico etc.)

  • Saving settings and login token (in secure way where possible)

  • TV (Video player) with 3d sound and online videos/streams support (native builds only; Youtube, Vimeo, PeerTube etc. are NOT SUPPORTED on standalone builds; streams are not supported for macOS as well)

  • Traditional chatbox system

  • SST-based chatbox (GPU-accelerated Whisper running locally). Hidden by default, processing is disabled on low-end devices by default, all of that can be changed in settings.

  • Instance-togglable "cheats" (only noclip for now)

Nearest plans

  • Improved locomotion/character controller

  • Asyncronous map loading

  • Portals system (semi-seamless)

  • Calibration system for full body tracking (VRChat-like)

  • Either add SSL encryption for HTTP (map) server or swap it with WebSocket.

Contributing

How to contribute

Join the tapafon's project Space on either Discord or Matrix. Both communities are bridged, so you won't miss anything - feel free to choose!

Forgejo is invite-only for now, that may change in the future.

Contributions mean not just PRs and issues, but also participating in WAN tests and discussing potential ideas.

(gen)AI policy

All generative models are enhanced autocompletes, which can only predict what human COULD make (pattern-based), mostly limited to whatever was in their dataset (which may include copyrighted/patented/illegal data) and therefore mostly stuck in the past, unless retrained from scratch, which requires even more resources than inference. However, significant amount of people overestimate their capabilities and start to misuse them, to the point they speedrun Idiocracy. That includes delegating whole projects to AI agents, with little to no human testing, manual fixes etc. Windows 11 and Omarchy are the most famous results of that (linux kernel is next?).

To reduce any new harm made by genAI, genAI usage is banned with two and a half expections:

  • using it as glorified search engine (because modern search engines suck, especially when most stuff which should belong in forums accessible to everyone, at least read-only, ends up in group chat applications such as Discord, which are not indexed by search robots as a rule).

    • Only local LLMs can be used, running on your GPU/NPU/CPU in something like LM Studio or Ollama. That means that any usage of Gemini, ChatGPT, Claude or other cloud models is banned whatsoever, so is using rented cloud VM (which includes but doesn't limit to Google Collaboratory) to run LLM for you;

    • Despite so-called AI agents (Codex, Claude Code, OpenCode, OpenClaw) can do web search too, their usage is banned whatsoever;

    • You must not link to/include AI summary of that "result" as source (especially sole one). Instead, review original URLs LLM fetched, and link to them directly, since LLM still errors as a rule.

      • Yes, that means you must install web search plugin if your inference tool doesn't have one built-in. But if SearXNG is involved, you must self-host your own instance.
    • Even that usage is discouraged, and should make your own research in old-fashioned way if you can.

  • brainstorming is temporarily allowed until I get enough people in Discord/Matrix to discuss ideas with.

    • Same sub-rules as above apply here.
  • accesibility features (allowed case-by-case), such as STT for deaf people

    • Only local models may be used;

      • On top of that, they must not consume substantial resources (VR is already resource-hungry), a.k.a. >=85% of GPU usage must be directed to rendering frames. Those two rules ban all LLM-based solutions;
    • On low-end hardware, they must be disabled by default. Moreover, user must be able to disable those features in Settings;

    • As soon as plugin system is developed, and design does not require computations from every single player, it must not shipped with core application, and must be shipped as a plugin instead;

    • ACCESIBILITY MUST NOT GO "AT ALL COSTS". WATCH AND LEARN, MASTODON 5.0.

Any other AI usages, especially ones which will directly affect project, which include but don't limit to generating substantial amounts of code, generating assets like images or 3d models, generating issues, pull requests, translations or just being a so-called meat proxy, is banned whatsoever.

TL;DR Usage of generative AI is mostly banned, and parts which aren't are extremely limited.

If I wanted to vibe-code the entire project, I would do that on the day one.

This policy is subject to change, depeding on current situation.

Installation/upgrade/development

For initial install (depending on platform):

  • Unpack Windows.zip or Linux.zip on PC

  • Unpack Web.zip and then copy to your web server. The latter one should be properly configured, like such: https://gist.github.com/nisovin/cf9dd74678641fb70902866c79692b17

  • Install HoloFedPrototype *.apk, where * stands for your headset. Q1 stands for Quest 1, Q2+ - Quest 2 and newer, others should be obvious.

Then launch executable on PC, index.html (where you unpacked) on Web, or application in standalone headset.

For upgrade, reunpack zip folder over older one or install *.apk file again.

For development, cloning repository and opening the project in Godot editor should be enough.

How to create/port a map for HoloFed

See Map template, as well as TestScene.tscn for reference. *.tscn, *.pck files and folder with resources must have the same name.

Than export the project (ideally only ExternalMaps folder) as *.pck file, and put it into %godot_user_folder%/maps. All neccesarry folders will be created automatically on launch if missing.

How to create/port an avatar for HoloFed

See built-in avatars for reference. Then use Avatar template as a starting point.

Export project (ideally only ExternalAvatars folder) as a *.pck file. Upload it into Relay with your web browser.

Credits

This software uses FFmpeg code licensed under the GPLv3. You can get the source code for this version of FFmpeg here: https://github.com/EIRTeam/EIRTeam.FFmpeg

Other addons are licensed under the MIT License (some components of them may have different licenses), with notable exception of Kenney Prototype textures (CC0).

"Humanoid Avatar with Rig" (https://skfb.ly/otUFC) by 3DStory is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).