dockyardrift
archived

dockyardrift

A multiplayer 3D world built with Hyperfy's Lobby SDK. Features custom camera systems, VRM avatar support, entity-component architecture, and real-time sync. Live at lobby.ws/worlds/dockyardrift.

hyperfylobby-sdkmultiplayervrmweb3djavascript

ARCHIVED β€” dockyardrift is staged, not dead. The Schizodio avatar collection (999 hand-crafted traits, deadlined end of June 2026) is the upstream dependency. Once those avatars exist, they’ll populate dockyardrift and other Hyperfy worlds as NPCs. Then SPICEX will use them as hidden collectibles. Then dockyardrift gets its final build. The vision never shifted β€” it just got sequenced correctly. We’ll be back.

Overview

dockyardrift is a live multiplayer 3D world running on lobby.ws. It’s the 3D web counterpart to SpiceX β€” a space for experimentation with real-time multiplayer, VRM avatars, and custom world logic.

Key features:

  • Custom third-person camera with smooth interpolation
  • VRM avatar loading with spring bone physics
  • Entity-component system for world objects
  • Real-time multiplayer synchronization
  • Hot-reload development workflow
  • AI-assisted development with Claude/Cursor/Opencode

Tech Stack

  • Lobby SDK β€” Hyperfy’s world building framework
  • JavaScript (SES) β€” App scripting environment
  • VRM β€” Avatar format
  • Three.js β€” Underlying 3D engine
  • WebSockets β€” Real-time multiplayer sync
  • msgpackr β€” Binary serialization

Architecture

Client-Server Model

// Client-side
if (world.isClient) {
  const action = app.create('action')
  action.onTrigger = () => {
    app.send("player:move", { data: position })
  }
}

// Server-side
if (world.isServer) {
  app.on("player:move", (data, networkId) => {
    app.position.fromArray(data)
    app.send("player:position", app.position.toArray())
  })
}

Entity Component System

World β†’ Systems β†’ Entities β†’ Nodes. Each app is a self-contained entity with its own update loop, physics, and networking.

Configuration System

Apps configure themselves with declarative config arrays:

app.configure([
  {
    type: 'text',
    key: 'title',
    label: 'World Title',
    initial: 'dockyardrift'
  },
  {
    type: 'color',
    key: 'neonColor',
    label: 'Neon Accent',
    initial: '#00ffaa'
  }
])

Deployment

The gamedev deploy CLI command pushes changes live in seconds. The workflow:

  1. Develop locally with gamedev dev (hot reload)
  2. Build with npm run build
  3. Deploy with gamedev deploy
  4. Live at lobby.ws/worlds/dockyardrift
  • lobby.ws β€” Blog post about the platform
  • Cleetus Project β€” The VRM character that lives in dockyardrift
  • SpiceX β€” Godot counterpart, same universe