Febris

XR and simulation training, on infrastructure you own.

Febris delivers training to headsets and desktops, and records what actually happened during the session as xAPI. One node owns everything it needs: identity and accounts, cohorts, curricula and modules, a statement store, usage analytics, and the artifact store that distributes the client software to devices. There is no Febris account, no licence key, and no service the maintainer operates.

How it fits together

Three pieces. A server you run, clients that deliver the training, and an SDK for the people building the simulations.

The node

An ASP.NET Core server you host. It holds your accounts and curricula, ingests xAPI statements from devices, and hands out the client software those devices run.

The clients

A Windows suite for desktop simulation, and an Android pair where a Mobile Server distributes modules to headsets over a direct WiFi link and relays their records back.

The SDK

Drop it into your own simulation to emit conformant statements. C# and C++ produce byte-identical output at the same version, so a mixed estate stays consistent.

What a node gives you

All of this is code in the repository rather than a roadmap. Where something is a seam rather than a finished feature, the project says so in its own README.

Learning records that survive audit
A dedicated xAPI store with its own database, statements deduplicated on the identifier their producer assigned, and the raw submission preserved alongside the parsed form.
Cohorts, curricula and modules
Organise learners, group them, assign curricula, and version the module archives that devices pull down.
Client distribution built in
The node is the artifact store. Devices ask it for the current build and it serves the bytes, checksum recorded, so a headset updates without anyone visiting a website.
Transport hardening the operator controls
HSTS, an exact-match CORS allow-list, frame and content-type headers, all from one configuration section, with defaults chosen so a node behind a TLS proxy does not loop.
Rate limiting that ships on by default
Per-IP endpoint rules returning 429, tuned tightly on login, password reset and token endpoints, retunable without a rebuild.
Nothing phones home
Federation to a hub exists as an opt-in gate and defaults to off. Learning records have no upward path at all. An air-gapped site is a supported deployment, not an afterthought.

Run one

A Docker Compose stack: Postgres 16, Valkey 8, the API, the portal, and a Caddy reverse proxy that issues its own certificate for local use.

git clone https://github.com/Febris-XR/Febris_Node.git febris-node && cd febris-node
./selfhost/generate-env.sh
docker compose up -d --build

The generated environment file prints your first login. Everything else, including backups, upgrades, TLS and going to production, is in SELF_HOSTING.md.

ComponentPlatformStatus
PC Client SuiteWindows 10 or later, x64Published
Mobile ServerAndroid 10 or later, sideloadedPublished
Mobile CompanionAndroid 8 or later, installed onto the headsetPublished
Simulation SDK for C#.NET Standard 2.0Published
Simulation SDK for C++Windows x64, MSVC v143, C++17Published

How to use it

Guides for each piece, carried over from the node's own documentation. Where a guide is unwritten or known to be incomplete, it says so on the page rather than pretending otherwise.

PC

The PC suite runs the simulation on a Windows machine. You install it once, register that PC on your node's Hardware page, and paste in the credential the node issues. From then on the Launcher pulls the modules the learner is assigned, starts the session, and the Statement Manager sends the resulting xAPI records back to your node on its own.

Read the PC guide

Mobile Server

The Mobile Server is the Android app that manages your headsets. You register it the same way, then use it to discover a headset over Bluetooth, pair with it by confirming a six digit code shown on both screens, and install the Mobile Companion onto it. From then on it distributes module archives over a direct WiFi link and relays the resulting records back to your node, so the headsets never need your network credentials.

Read the Mobile Server guide

Downloads

Every version, size and checksum below is read straight from the distribution feed, so this page describes exactly what the feed serves and nothing else. 5 of 5 components are published today, and the rest say so plainly rather than being hidden.

Version 0.2.0

PC Client Suite

Windows 10 or later, x64

The Windows desktop suite: launcher, module manager, screen recorder, statement manager and progress bar. Runs the simulation session on the learner's machine and reports back to your node.

Filefebris-pc-suite-v0.2.0.zip
Size39.7 MB
SHA-2561e168d1ad08fbe6a1eb9ef3c5596235a1a3137419589ae1ac1e28dc7929a5efb
Version 0.2.0

Mobile Server

Android 10 or later, sideloaded

The Android MDM server. Pairs with headsets over WiFi Direct, distributes module archives, and relays learning records back to your node.

Filefebris-mobile-server-v0.2.0.zip
Size38.4 MB
SHA-256122bf4136ea9bcb79585fe6fed6ad35d687a79395b5934d365b0032fecbd75ad
Version 0.2.0

Mobile Companion

Android 8 or later, installed onto the headset

The headset companion. Captures the session on-device and hands statements to the Mobile Server over a direct peer link.

Not a browser download. The Companion is delivered to the headset by your Mobile Server over a direct link, so it installs itself once the Server is paired and pointed at your node.

Filefebris-mobile-companion-v0.2.0.zip
Size19.1 MB
SHA-256a112844255e8043b1e99df001c08a2afcc67bf94dc4535fb576c6af91d15016a
Version 0.1.0

Simulation SDK for C#

.NET Standard 2.0

Author conformant xAPI statements from a .NET simulation. Byte-identical output to the C++ SDK at the same minor version.

Add it to a project

dotnet add package Febris.Simulation.XApiSdk --version 0.1.0
Filefebris.simulation.xapisdk.0.1.0.nupkg
Size48.0 KB
SHA-2568d3666bc5748ab5472fcf1c57ac38fa61648b128ad30249a6f1aa0faebcac6cf
Version 0.1.0

Simulation SDK for C++

Windows x64, MSVC v143, C++17

The native twin of the C# SDK, with a flat C ABI for engines and hosts that cannot consume managed code. Verified byte-identical on every release.

Register the vcpkg registry

vcpkg-configuration.json -> registries -> https://github.com/Febris-XR/Febris_VcpkgRegistry

Then install

vcpkg install febris-simulation-sdk
Filefebris-simulation-sdk-cpp-v0.1.0-win-x64.zip
Size203.4 KB
SHA-2562570817c6462ae616b16f1ad9b7b77c003fbfc0765b10da7460a9cce2237cf59