2026-02-05 17:47:13 +01:00
<!doctype html>
< html lang = "en" _data-theme = "light" >
< head >
< meta charset = "utf-8" >
< title > XR Hypermedia Federation 🥽< / title >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< meta name = "color-scheme" content = "light dark" >
< meta name = "description" content = "XR Hypermedia Federation 🥽" / >
< meta name = "publisher" content = "XR Hypermedia Federation" / >
< meta name = "author" content = "Leon van Kammen - XR Hypermedia Federation" / >
< link rel = "stylesheet" href = "asset/css/pico.min.css" / >
< link rel = "stylesheet" type = "text/css" href = "asset/css/style.css" / >
< / head >
< body >
< header class = "container" >
< div id = "logo" > < / div >
< div id = "hint" > < / div >
< hgroup style = "margin-top:12px" >
< h1 style = "opacity:0" > The XR Federation< / h1 >
< / hgroup >
< / header >
<!-- ./ Header -->
<!-- Main -->
< main class = "container" >
2026-02-05 23:25:58 +01:00
< h2 > Digital commons for XR hypermedia 🥽< / h2 >
2026-02-05 17:47:13 +01:00
< div class = "telescopic" >
We connect, and < b > help fund< / b > open XR ecosystems 🥦< br >
2026-02-06 12:22:31 +01:00
We support < b > public local-first< / b > AR/VR/MR
2026-02-05 17:47:13 +01:00
< u tabindex = "0" > highways
< span > , seamlessly connected XR experiences: public < b > XR hypermedia< / b > .
< div id = "xrecosystem" > < / div >
< / span >
< / u >
without
< u tabindex = "0" > obstacles 🈚
< span > like appstores, rent-seeking, blockchain-minting etc< / span >
< / u >
< br >
We encourage < b > spatialisation< / b > of existing
< u tabindex = "0" > ecosystems
< span > like the 2D web, or file-collections< / span >
< / u > using open
< u tabindex = "0" > protocols 🔌
< span > : < a href = "https://en.wikipedia.org/wiki/RSS" target = "_blank" > RSS< / a > , HTML, < a href = "https://janusxr.org/docs/build/introtojml/index.html" target = "_blank" > JML< / a > , Fediverse's < a href = "https://activitypub.rocks/" target = "_blank" > ActivityPub< / a > and < a href = "https://xrfragment.org" > URI's using XR Fragments< / a > e.g.< / span >
< / u >
< br >
< div class = "banner" >
< div id = "banner" > < / div >
< / div >
Our
< u tabindex = "0" > mission
< span >
< blockquote >
< cite >
to promote the exchange of < b > electronic spatial experiences< / b > and all that is related or beneficial to that purpose
< / cite >
< / blockquote >
< / span >
< / u >
100% piggybacks < a href = "https://nlnet.nl/foundation" target = "_blank" > NLnet< / a > and
< u tabindex = "0" > European
< span > values: European Digital Rights and Principles to promote feelgood XR experiences for everybody.< br >
< div id = "euvalues" > < / div >
< / span >
< / u >
2026-02-05 23:25:58 +01:00
, American < a href = "https://www.state.gov/wp-content/uploads/2022/04/Declaration-for-the-Future-for-the-Internet.pdf" target = "_blank" > DFI< / a > -values, narrowed down to < b > OpenSource hyperlinked< / b > XR experiences.< br >
2026-02-05 17:47:13 +01:00
< / div >
< br >
< blockquote >
< div id = "lvk" > < / div >
< cite >
2026-02-06 12:22:31 +01:00
"XR hypermedia enables cost-efficient spatial education and innovation by hyperlinking XR experiences."
2026-02-05 17:47:13 +01:00
< / cite >
2026-02-05 23:25:58 +01:00
2026-02-05 17:47:13 +01:00
< br > < b > Leon van Kammen< / b > / Founder, Strategy Director / < a href = "https://mastodon.online/@lvk" target = "_blank" > @lvk@mastodon.online< / a >
< / blockquote >
< center >
2026-02-05 23:25:58 +01:00
< button onclick = "alert('Hi there!\nPlease send a mail to\n\nleonvankammen+xrhf @ isvery.ninja\n\nthanks!')" style = "padding:30px;margin:20px" > Contact us< / button >
2026-02-05 17:47:13 +01:00
< br / >
< br / >
< / center >
2026-02-05 23:25:58 +01:00
< div class = "spectrum" >
< div > < / div >
< div > < / div >
< / div >
2026-02-05 17:47:13 +01:00
< div id = "cards" >
< h3 id = "projects" > Projects: < / h3 >
< input type = "radio" id = "protocol" name = "color" / >
< label for = "protocol" > < kbd > #protocol< / kbd > < / label >
< input type = "radio" id = "openlearning" name = "color" / >
< label for = "openlearning" > < kbd > #openlearning< / kbd > < / label >
< input type = "radio" id = "browser" name = "color" / >
< label for = "browser" > < kbd > #browser< / kbd > < / label >
< input type = "radio" id = "xrdiscovery" name = "color" / >
< label for = "xrdiscovery" > < kbd > #xrdiscovery< / kbd > < / label >
< input type = "radio" id = "webtranslator" name = "color" / >
< label for = "webtranslator" > < kbd > #webtranslator< / kbd > < / label >
< input type = "radio" id = "reset" name = "color" / >
< label for = "reset" > < kbd > #all< / kbd > < / label >
< br / >
< br / >
< div class = "tile xrdiscovery" >
< div id = "xrforge" class = "thumb" > < / div >
< a class = "description" href = "https://xrforge.isvery.ninja" target = "_blank" >
< b > XR Forge< / b > is a selfhostable platform for JanusWeb/File-based XR Experiences.
#cost-efficient #collaboration #Universities #E-learning
< / a >
< / div >
< div class = "tile protocol" >
< div id = "xrfragment" class = "thumb" > < / div >
< a class = "description" href = "https://xrfragment.org" target = "_blank" >
XR (URI) Fragments is a browser-protocol for
spatial anchors in URLs (to 3D files).< br >
In < b > gamer language< / b > : spawnpoints via URLs.
< / a >
< / div >
< div class = "tile browser" >
< div id = "januswebbrowser" class = "thumb" > < / div >
< a class = "description" href = "https://coderofsalvation.github.io/janus-guide/" target = "_blank" >
< b > JanusWeb< / b > is the XR browser for the browser.< br >
Its JML allows for an XR web < b > within existing< / b > files/web< / b > .< br >
It also supports browsing 3D files via XR (URI) Fragments.
< / a >
< / div >
< div class = "tile openlearning" >
< div id = "biggu_s_gate" class = "thumb" > < / div >
< a class = "description" href = "https://git.benetou.fr/utopiah/biggu_s_gate" target = "_blank" >
< b > Biggu's Gate< / b > is self-hostable web-software to remix simple pedagogical XR games. Learners themselves can then, together with parents and teachers.
< / a >
< / div >
< div class = "tile webtranslator" >
< div id = "translators" class = "thumb" > < / div >
< div id = "janusweb" class = "thumb hue-1" > < / div >
< a class = "description" href = "https://coderofsalvation.github.io/janus-guide/" target = "_blank" >
< b > JanusWeb's< / b > translators spatialize the web, embedding webstandards like (RSS/HTML) and popular fediverse platforms (peertube/mastodon e.g.).< br >
< / a >
< / div >
< div class = "tile xrdiscovery" >
< div id = "searxr" class = "thumb" > < / div >
< a class = "description" href = "https://searxr.me" target = "_blank" >
< b > SearXR< / b > is a SearX-based meta-searchengine for < b > WebXR< / b > experiences.
< / a >
< / div >
< div class = "tile webtranslator" >
2026-02-05 23:25:58 +01:00
< div id = "xrshthumb" class = "thumb" > < / div >
2026-02-05 17:47:13 +01:00
< a class = "description" href = "https://xrsh.isvery.ninja" target = "_blank" >
< b > XRSH< / b > is a Linux Shell for < b > WebXR< / b > , which makes the Linux ecosystem of cli-tools available in < b > WebXR< / b > .
< / a >
< / div >
2026-02-06 12:22:31 +01:00
< div class = "tile browser" >
< div id = "aframeverse" class = "thumb" > < / div >
< a class = "description" href = "https://xrsh.isvery.ninja" target = "_blank" >
< div class = "desc" > < a href = "https://github.com/coderofsalvation/aframe-verse" target = "_blank" > AFRAME-verse< / a > is XR Hypermedia network-experiment which traverses crossdomain AFRAME XR experiences seamlessly. The learnings became the fundament for the XR (URI) Fragments.< br >
< / div >
< / a >
< / div >
2026-02-05 17:47:13 +01:00
< div class = "clear" > < / div >
< / div >
2026-02-05 23:25:58 +01:00
< br >
< div class = "spectrum" >
< div > < / div >
< div > < / div >
< / div >
2026-02-05 17:47:13 +01:00
<!-- The Timeline -->
< center >
< h3 > Timeline< / h3 >
< / center >
< ul class = "timeline" id = "timeline" >
<!-- Item 1 -->
< li id = "janusxr" >
< div class = "direction-r" >
< div class = "flag-wrapper" >
2026-02-05 23:25:58 +01:00
< span class = "flag" > JanusXR / JML syntax< / span >
2026-02-05 17:47:13 +01:00
< span class = "time-wrapper" > < span class = "time" > 2013< / span > < / span >
< / div >
2026-02-05 23:25:58 +01:00
< div class = "desc" > URL-linked virtual worlds (JanusVR) by James McCrae (incl. URL portalsystem). Rebrands in 2020 to (opensource) < b > JanusXR< / b > with focus on < a href = "https://github.com/jbaicoianu/janusweb" target = "_blank" > janusweb< / a > . First < b > convincing< / b > VR-headset-compatible < b > user-operated< / b > spatial web, used by more than thousands of users.
2026-02-05 17:47:13 +01:00
2026-02-05 23:25:58 +01:00
< br > < br >
2026-02-05 17:47:13 +01:00
< div id = "janus1" > < / div >
< / div >
< / div >
< / li >
2026-02-05 23:25:58 +01:00
< li id = "searxr" >
< div class = "direction-l" >
< div class = "flag-wrapper" >
< span class = "flag" > SearXR Funded< / span >
< span class = "time-wrapper" > < span class = "time" > 2020< / span > < / span >
< / div >
< div class = "desc" >
NLnet #NGI #EU funds < a href = "https://searxr.me" target = "_blank" > SearXR< / a > an opensource selfhostable meta-searchengine for < b > public< / b > URL-based virtual worlds.< br >
< div id = "searxr" style = "width:250px; height:250px;display:inline-block;border-radius:7px" > < / div >
< / div >
< / div >
< / li >
2026-02-05 17:47:13 +01:00
<!-- Item 3 -->
< li >
2026-02-05 23:25:58 +01:00
< div class = "direction-r" >
2026-02-05 17:47:13 +01:00
< div class = "flag-wrapper" >
< span class = "flag" > Facebook rebrand< / span >
< span class = "time-wrapper" > < span class = "time" > 2021< / span > < / span >
< / div >
2026-02-05 23:25:58 +01:00
< div class = "desc" > 8 years after < b > JanusXR< / b > , Facebook attempts similar 'metaverse', but proprietary and centralized< / b > (rebrands to 'Meta')< / div >
2026-02-05 17:47:13 +01:00
< / div >
< / li >
< li >
2026-02-05 23:25:58 +01:00
< div class = "direction-r" >
2026-02-05 17:47:13 +01:00
< div class = "flag-wrapper" >
< span class = "flag" > XR Fragments Funded< / span >
< span class = "time-wrapper" > < span class = "time" > 2021< / span > < / span >
< / div >
2026-02-05 23:25:58 +01:00
< div class = "desc" > NLnet #NGI #EU funds < a href = "https://xrfragment.org" target = "_blank" > XR URI Fragments< / a > by Leon van Kammen. Standardisation of spatial anchors in < b > URI's< / b > . It got adopted by startups like Alkebulan, and was coincedentally (already) implemented by < a href = "https://github.com/jbaicoianu/janusweb" target = "_blank" > janusweb< / a > (independent simultanious innovation 💡).
2026-02-05 17:47:13 +01:00
< br >
< div id = "xrflogo" style = "display:inline-block;" > < / div >
< / div >
< / div >
< / li >
2026-02-05 23:25:58 +01:00
< li >
< div class = "direction-l" >
< div class = "flag-wrapper" >
< span class = "flag" > XRSH funded< / span >
< span class = "time-wrapper" > < span class = "time" > 2021< / span > < / span >
< / div >
< div class = "desc" > First ever in-WebXR Terminal running an actual Linux ISO. This researchproject basically brings the opensource linux ecosystem to otherwise closed proprietary headsets. Aerospace engineers have reported to be using it.< / div >
< br >
< div id = "xrsh" style = "display:inline-block;" > < / div >
< / div >
< / div >
< / li >
< li >
< div class = "direction-r" >
< div class = "flag-wrapper" >
< span class = "flag" > HAN University collab< / span >
< span class = "time-wrapper" > < span class = "time" > 2024< / span > < / span >
< / div >
< div class = "desc" >
< a href = "https://han.nl" > HAN University< / a > uses < a href = "https://xrfragment.org" target = "_blank" > XR (URL) Fragments< / a > while researching VR accessibility. One of the results of this collaboration is the addition of < a href = "https://xrfragment.org/doc/RFC_XR_Fragments.html#two-button-navigation" target = "_blank" > 2-button navigation< / a > to the XR Fragments spec.
< br >
< div id = "hanlogo" style = "display:inline-block;" > < / div >
< / div >
< / div >
< / li >
< li >
< div class = "direction-l" >
< div class = "flag-wrapper" >
< span class = "flag" > XRForge funding< / span >
< span class = "time-wrapper" > < span class = "time" > 2025< / span > < / span >
< / div >
< div class = "desc" >
< a href = "https://xrforge.isvery.nl" > XRForge< / a > was created to ....
< br >
< div id = "xrforge" style = "display:inline-block;width:250px;height:200px;border-radius:7px" > < / div >
< / div >
< / div >
< / li >
2026-02-05 17:47:13 +01:00
< / ul >
< h3 > Funding FAQ< / h3 >
2026-02-05 23:25:58 +01:00
< b > Q: Are we talking VC-money?< / b > < br >
< b > A:< / b > Think microgrants / no-cure-no-pay funding of digital commons, think < a href = "https://en.wikipedia.org/wiki/Cosmopolitan_localism" target = "_blank" > cosmolocalism< / a > .
< hr / >
2026-02-06 12:22:31 +01:00
< b > Q: Is it easy to get (my game) funded (made with Unity/Unreal)?< / b > < br >
< b > A:< / b > Indirectly funding/promoting proprietary engines with public money is tough (public money public code).< br >
2026-02-05 23:25:58 +01:00
< hr / >
< b > Q: Which Open XR engines are preferred?< / b > < br >
2026-02-06 12:22:31 +01:00
< b > A:< / b > Preferred are Fully Opensource XR < b > Browser< / b > engines like:
2026-02-05 23:25:58 +01:00
< ul >
< li > < a href = "https://github.com/jbaicoianu/janusweb" target = "_blank" > JanusWeb (WebXR) ♥️< / a > < / li >
2026-02-06 12:22:31 +01:00
< / ul >
Or roll your own XR hypermedia browser (via < a href = "https:/xrfragment.org" target = "_blank" > XR Fragments< / a > e.g.):
< ul >
2026-02-05 23:25:58 +01:00
< li > < a href = "https://godot.org" target = "_blank" > Godot (OpenXR/WebXR)< / a > < / li >
< li > < a href = "https://lovr.org" target = "_blank" > loVR (OpenXR)< / a > < / li >
< li > < a href = "https://threejs.org" target = "_blank" > THREE.js (WebXR)< / a > < / li >
< li > < a href = "https://babylonjs.com" target = "_blank" > Babylon.js (WebXR)< / a > < / li >
< li > < a href = "https://monado.dev/" target = "_blank" > Monado (OpenXR)< / a > < / li >
< / ul >
2026-02-06 12:22:31 +01:00
♥️ = janusweb has the highestlocal-first XR hyperedia-factor, see < a href = "https://coderofsalvation.github.io/janus-guide/#/wiki/translators" target = "_blank" > translators< / a > , < a href = "https://coderofsalvation.github.io/janus-guide/#/wiki/polyglot-files" target = "_blank" > polyglot< / a > and < a href = "https://coderofsalvation.github.io/janus-guide/#/wiki/addressibility" target = "_blank" > addressibility< / a > and runs on desktop/phone/headset all-at-once.
2026-02-05 23:25:58 +01:00
< blockquote >
Contact us in case you've got questions
< / blockquote >
< hr / >
< b > Q: Regarding hyperlinking, is linking to a webpage enough?< / b > < br >
2026-02-06 12:22:31 +01:00
< b > A:< / b > Most games or WebXR-sites are shallow-linked disjointed XR experiences (not hypermedia), basically:
2026-02-05 23:25:58 +01:00
< blockquote >
< cite >
2026-02-06 12:22:31 +01:00
"We don't want customers to leave our premise"
2026-02-05 23:25:58 +01:00
< / cite >
< / blockquote >
2026-02-06 12:22:31 +01:00
A much more interesting is < b > seamless XR hypermedia< / b > surfing: by interlinking 3D files < b > immersively< / b > via < a href = "https://xrfragment.org" target = "_blank" > (XR Fragment) URLs< / a > or < a href = "https://coderofsalvation.github.io/janus-guide/" target = "_blank" > JanusWeb< / a > .< br > See the difference below:< br > < br >
2026-02-05 23:25:58 +01:00
< img src = "asset/img/xrhypermedia.jpg" style = "width:100%;border-radius:7px;max-width:900px;filter: invert(1) hue-rotate(155deg)" / >
< blockquote >
< b > Rule of thumb< / b > : if the XR content can be selfhosted < b > by users< / b > separately from < b > the XR viewer< / b > , you're on the right track.
< / blockquote >
< hr / >
< b > Q: Crypto?< / b > < br >
< b > A:< / b > Not really, because of price volatility and regulatory/AML compliance hurdles. Privacy mechanisms like < a href = "https://www.taler.net/en/index.html" target = "_blank" > TALER< / a > can be discussed though.
2026-02-05 17:47:13 +01:00
< br >
2026-02-05 23:25:58 +01:00
< center >
< button onclick = "alert('Hi there!\nPlease send a mail to\n\nleonvankammen+xrhf @ isvery.ninja\n\nthanks!')" style = "padding:30px;margin:20px" > Contact us< / button >
< br / >
< br / >
< / center >
2026-02-05 17:47:13 +01:00
< div class = "footer" >
< small > Jump to:< / small >
< a href = "#projects" > < kbd > #projects< / kbd > < / a >
< a href = "#timeline" > < kbd > #timeline< / kbd > < / a >
< / div >
< / main >
< script >
// telescopic text:
// a JS cheat whicht allows persisting unfolds
// uncomment this if you really want this
([...document.querySelectorAll('u')]).map( (u) => {
u.addEventListener('click', e => e.target.className = 'show' )
});
< / script >
< / body >
< / html >