Nob ~/jukz

03 · minecraft mod

jukz

A Minecraft world that lives wherever its host is online

To play in the same Minecraft world with friends, someone has to keep a server running. jukz takes that part away: the world opens on the PC of whoever is playing, and when they leave, it moves on to the next person

v0.4.3 · free · open source · Fabric

##Why jukz?

No server running

Nobody pays for hosting or leaves a PC on. The world opens wherever someone is playing

Your world is never lost

If the host leaves, it moves to another player. If everyone leaves, it waits in the cloud for the next one

No port forwarding

Works behind your home router and even on phone data (CGNAT), through the relay

Cosmetics and skins

Free hats, wings and badges, and your own skin even without a Mojang account

~/jukz · v0.4.3 · 2026-10-06

Download v0.4.3

Pick your Minecraft version:

Your friends need jukz installed too. all versions and release notes ↗

Install in 3 steps

  1. Install Fabric Loader for your Minecraft version (or use Prism Launcher)
  2. Drop the jukz jar and its dependencies into your mods folder: Fabric API, Fabric Language Kotlin and owo-lib
  3. Open a world and share its JUKZ code. Your friends paste it and join, no IP or server needed

##See it work

##Opening a world is asking

Every world gets a permanent UUID and a short share code. When you open it, jukz asks the network whether someone already has it open. If so, you join that person's world live, just like when someone opens their game to LAN. If not, the world opens on your PC and you're announced as the host. There are no copies to sync: the world lives in exactly one place at a time

##Finding each other

On the same network, PCs find each other over multicast, no internet needed. To play from different homes there's a rendezvous server of my own on Cloudflare (a Worker with Durable Objects), where every host announces itself. The host opens its router port with UPnP; when that's not possible (behind CGNAT, for example), the rendezvous acts as a WebSocket relay and joins the two outgoing connections

##Never two hosts

Every announcement carries a token with a generation number. If two people open the same world at the same time, the newest generation wins and the other one finds out: they can keep their local copy or join the live game as a guest

##Handing the world over

When the host quits with guests connected, it saves, snapshots the world with JGit and sends it to a guest over the same connection the game uses; the guest applies it and carries on as the host. If it quits with nobody around, the snapshot goes up to the cloud (R2) and the next person to open the world downloads it and picks up from there

##Your worlds on every PC

With a Microsoft account, every world you upload to the cloud is remembered on your account. Start the game on another PC or a fresh instance and the worlds come over on their own. A screen inside the game (the person icon on the title screen) shows your plan and today's uploads, lists the cloud worlds so you can bring or forget them, and the ones that only live on this PC, with a button to upload them. An account is optional: without one the game works the same, with smaller limits on the cloud copy (40 MB and 30 days, against 95 MB and 180 days)

##Who gets in

The share code finds a world and lets you ask to join, but every world also has an Ed25519 key that travels with its files: announcing, renewing the announcement and uploading or downloading the cloud copy are all signed with it. Someone with only the code can't take over the live world, overwrite the copy or ask for the handoff. Guests are verified by Mojang like on a normal server, and the host can close access to make the world private

##Cosmetics

Hats, glasses, backpacks and wings drawn on your character, and a pixel badge next to your name in the player list. Everyone sees what you wear if they run jukz. They are made of ASCII art: each piece is a stack of text layers that the mod turns into a 3D mesh, so adding a new one needs no mod update. Today they are free, and anyone can design one in Blockbench and send it from the creators page

##Your skin, with or without a Mojang account

From the hub you pick a PNG (or drop it on the window), classic or slim arms, and see it on yourself before applying. With a Mojang account, jukz changes your real skin through Mojang’s API, and your session goes to Mojang only. Without one, the skin stays on your PC: when you play through jukz, your game hands it to the host over the game connection and the host passes it to the rest of the world, in memory only. No jukz server stores it

##How it was tested

The hard logic (host election, tokens, the protocol) lives in a pure Kotlin module with no Minecraft in it, covered by 94 tests. The rest was tested in-game with two clients against the live server, with the relay forced: joining, handing the world over, closing access and the cloud upload. Then it was tested across two real networks: one PC on the home network and the other on phone data, behind CGNAT. Joining by code, handing the world over both ways and the cloud copies all went through the relay

~/jukz · how it works
open a world (UUID)
 │
 ▼
is anyone hosting it?
 │ LAN: multicast · internet: rendezvous (Cloudflare)
 ├─ yes ─► join as a guest, live
 └─ no ──► open on this PC and announce it
           │ UPnP, or a WebSocket relay
           ▼
        when the world closes
         ├─ guests online ─► JGit snapshot ─► new host
         └─ nobody ────────► snapshot to R2 ─► next player
Two PCs, one world: each window is a different player, joined through jukz
World selection screen with a green dot and the number 1 next to New World
The world list: the green dot marks a world someone is hosting right now
The host left with a guest connected: the guest has the latest world and can carry on as the host
World info panel with the JUKZ code, the UUID, generation 14, the relay and a live status
World info, the host's panel: share code, generation, relay and a live self-check (IPs blurred)
Quitting with nobody around backs the world up to the cloud for the next player
Minecraft: two players, one with a crown and sunglasses and one with a party hat and 3D glasses
Two players wearing jukz cosmetics: a crown with sunglasses and a party hat with 3D glasses
The jukz hub, Cosmetics: point at a card and your character tries it on
Screenshots of two clients on two different networks playing the same world
Two real networks: the host on phone data and the guest from home, through the relay (IPs blacked out)
The jukz hub: your profile with storage, uploads today, retention and cosmetics
Minecraft: the player Beto wearing a custom skin, seen by Ana on a white platform
Two players without a Mojang account: Ana sees the skin Beto picked, sent from his PC to hers

##Log

  1. Finding each otherMulticast discovery on the local network, plus a rendezvous server for the internet; UPnP and STUN to get through each home's NAT
  2. First gameHost and guest playing end to end. The DHT I had planned got dropped: the rendezvous server was simpler and more reliable
  3. The world fell out of syncHanding the world to the next host was losing changes. The fix: a WebSocket relay on the rendezvous server that carries the world snapshot
  4. Never lose the worldIf the last player quits with nobody else online, the world is uploaded to the cloud (R2) and the next player picks it up from there. Also fixed the case of two hosts at once
  5. Moving to Cloudflare, new screensThe Fly.io server was gone, so the rendezvous moved to a Cloudflare Worker with Durable Objects. The screens were rebuilt in owo-ui on one shared theme with hot reload. And closing access no longer splits the world in two
  6. Cosmetics, accounts and two networks3D cosmetics, a key for every world and worlds that follow your account arrived, with the cloud copy at about half the size. It was tested between a home network and mobile data behind CGNAT, and everything went through the relay
  7. Your account, inside the gameA screen to see your plan, bring cloud worlds to another PC and upload the ones that only live on this one. Two bugs showed up: the world was marked one generation behind after hosting, so it re-downloaded its own copy. Version 0.2.0 shipped
  8. The hub and skinsAccount, cosmetics, skin and worlds in one full-screen window, with its own pixel look drawn without textures so it works the same on all three Minecraft versions. Changing your skin from the game, even without a Mojang account: the skin travels from PC to PC over the game connection. Shipped as version 0.4.0