Note: this Vibe Jam Portal is a totally different thing than the required widget snippet above. The widget is mandatory and just tracks your game; portals are optional and let players hop between games like a webring.
Make an exit portal in your game players can walk/fly/drive into — you can add a label like Vibe Jam Portal. This way players can play and hop to the next game like a Vibe Jam 2026 Webring! Your game will be added to the webring if you have a portal.
When the player enters the portal, redirect them to:
https://vibej.am/portal/2026
You can send GET query params that get forwarded to the next game:
username=— username/name of the playercolor=— player color in hex or justred/green/yellowspeed=— meters per secondref=— URL of the game the player came from
Use ?ref= to add a portal BACK to the game they came from.
Example URL:
https://vibej.am/portal/2026?username=levelsio&color=red&speed=5&ref=fly.pieter.com
The receiving game can use this info to spawn the player with full continuity!
Optional extra params:
avatar_url=team=hp=— health points; 1..100 rangespeed_x=— meters per secondspeed_y=— meters per secondspeed_z=— meters per secondrotation_x=— radiansrotation_y=— radiansrotation_z=— radians
The portal redirector will always add ?portal=true so you can detect when a user comes from a portal and instantly drop them into your game out of another portal — no start screens.
(!) IMPORTANT — Add a start portal:
When receiving a user (with ?portal=true in your URL) and a ?ref=, make a portal where the user spawns out of so they can return back to the previous game by walking into it. When returning them, make sure to send all the query parameters again too.
All parameters except portal are optional and may or may not be present — do not rely on their presence.
IMPORTANT: make sure your game instantly loads — no loading screens, no input screens — so the continuity is nice for players.
SAMPLE CODE — copy-paste-ready Three.js snippet for start + exit portals. Include it with a <script src>, call initVibeJamPortals({ scene, getPlayer }) once, and animateVibeJamPortals() inside your animate loop.
https://vibej.am/2026/portal/sample.js
`
`