Credits
Standing on the shoulders of giants. Here are as many of them as I could find.
People
- Drack, (That's me! My online pseudonym anyway), of Brain Vacation Studios (my LLC). As for what I did directly, I did the design, the QA testing, some manual programming, coordination & production, system administration & management, funding, and wrote most if not all of the wording.
- Everyone who made the things on this page. Every project below is the work of real people, most of them volunteers, who gave it away for free. Viva la open source community! https://opensource.org Y'all are the unsung heroes of the digital age, so I'm going to try to do some singing.
AI
- Claude, made by Anthropic: wrote most of the code for Project WhiteSpace and this site alongside Drack, working through Claude Code and/or Claude Desktop or Web. Note from Claude: (Hi! That's me. Thanks for having me.)
- Gemini, made by Google: provided second opinions, red team security testing, and more.
Project WhiteSpace
The game in your browser
- Babylon.js: the 3D engine that draws the whole world
- Havok Physics (@babylonjs/havok): collisions, jumping, falling over, and things that tumble
- Colyseus client (@colyseus/sdk): keeps everyone's browser in sync with the host
- node-qrcode: the invite QR codes
The host's computer
- Node.js: runs the server, including its zlib (by Jean-loup Gailly & Mark Adler), worker threads, and single executable applications (how the .exe is made)
- Colyseus, by Endel Dreyer and contributors (colyseus, @colyseus/schema, @colyseus/ws-transport): the multiplayer server
- Express: serves the game and the uploads
- ws and msgpackr: the live connections and the compact messages sent over them
- cloudflared and Cloudflare's free Quick Tunnels: the invite link that works without router setup
- Microsoft's .NET Framework, C# compiler and Windows Forms: the host's status window
- Windows: what the host app runs on
Building it
- Vite, with Rolldown, Oxc, Lightning CSS and PostCSS: packs the browser game together
- esbuild, by Evan Wallace: squeezes the server into one file
- postject: tucks it all inside the .exe
- npm: fetches every package listed at the bottom of this page
- Git, GitHub, GitHub Actions (checkout, setup-node, upload-artifact), GitHub Releases and the GitHub CLI: keep the code, build and test the .exe, and publish the downloads
- Playwright and Chromium: the automated tests that play the game in a real browser
- Python and Bash: little helper scripts along the way (including the one that wrote the package list on this page)
Testing it
- Blender: for prepping 3D models for upload
- CGTrader: for providing 3D models
- A variety of sources of 2D images, for testing the upload and download of pictures, including Monte Cook's The Darkest House
- The various manufacturers of my hardware, including but not limited to NVIDIA, AMD, Intel, Logitech, Blackview and more (I intend to flesh out this list more later)
The web, and the formats it reads
- WebGL, WebAssembly, WebSockets, the Web Audio API (and AudioWorklet), WebCodecs and microphone access: the browser features that make 3D, physics and voice possible, and the people at the W3C, WHATWG and Khronos Group who wrote them down
- Opus, from Xiph.Org and the IETF: the voice chat codec
- Chrome, Edge, Firefox and Safari: the browsers it plays in
- glTF / GLB (Khronos Group), Wavefront OBJ, and STL (3D Systems): the 3D model formats
- PNG, JPEG, GIF (CompuServe) and WebP (Google): the picture formats, which WhiteSpace reads and writes with its own code, thanks to their published specs and DEFLATE (Phil Katz)
Inspiration
- The Legend of Zelda: Ocarina of Time (Nintendo): the idea for Focus (F) comes from its targeting camera
- Every tabletop RPG group that ever played over the internet and wished it felt more like sitting at the same table
This site
- Plain HTML and CSS, nothing else
- Cloudflare (Workers static assets and DNS): hosts it for free and forwards readyupandroll.com here
- Inter, by Rasmus Andersson: the font, if your device has it (otherwise your system's own)
- Your device's emoji (๐ฒ ๐ ๐ ), drawn by its makers from the Unicode standard
- GitHub: keeps this site's code
Every package Project WhiteSpace uses
All 235 of them, including the ones the packages above rely on, and builds for systems you may never use. Each one links to its page, with its license beside it.
- @babylonjs/core Apache-2.0
- @babylonjs/havok MIT
- @better-auth/utils MIT
- @better-fetch/fetch MIT
- @colyseus/auth MIT
- @colyseus/better-call MIT
- @colyseus/clock MIT
- @colyseus/core MIT
- @colyseus/greeting-banner MIT
- @colyseus/monitor MIT
- @colyseus/playground
- @colyseus/redis-driver MIT
- @colyseus/redis-presence MIT
- @colyseus/schema MIT
- @colyseus/sdk MIT
- @colyseus/shared-types MIT
- @colyseus/timer MIT
- @colyseus/tools MIT
- @colyseus/uwebsockets-transport MIT
- @colyseus/ws-transport MIT
- @ioredis/commands MIT
- @msgpackr-extract/msgpackr-extract-darwin-arm64 MIT
- @msgpackr-extract/msgpackr-extract-darwin-x64 MIT
- @msgpackr-extract/msgpackr-extract-linux-arm MIT
- @msgpackr-extract/msgpackr-extract-linux-arm64 MIT
- @msgpackr-extract/msgpackr-extract-linux-x64 MIT
- @msgpackr-extract/msgpackr-extract-win32-x64 MIT
- @oxc-project/types MIT
- @pm2/io Apache-2
- @rolldown/binding-android-arm-eabi MIT
- @rolldown/binding-android-arm64 MIT
- @rolldown/binding-darwin-arm64 MIT
- @rolldown/binding-darwin-x64 MIT
- @rolldown/binding-freebsd-x64 MIT
- @rolldown/binding-linux-arm-gnueabihf MIT
- @rolldown/binding-linux-arm64-gnu MIT
- @rolldown/binding-linux-arm64-musl MIT
- @rolldown/binding-linux-ppc64-gnu MIT
- @rolldown/binding-linux-s390x-gnu MIT
- @rolldown/binding-linux-x64-gnu MIT
- @rolldown/binding-linux-x64-musl MIT
- @rolldown/binding-openharmony-arm64 MIT
- @rolldown/binding-win32-arm64-msvc MIT
- @rolldown/binding-win32-x64-msvc MIT
- @rolldown/pluginutils MIT
- @standard-schema/spec MIT
- @types/emscripten MIT
- @types/jsonwebtoken MIT
- @types/ms MIT
- @types/node MIT
- @types/ws MIT
- accepts MIT
- ansi-regex MIT
- ansi-styles MIT
- asn1.js MIT
- async MIT
- bn.js MIT
- body-parser MIT
- brorand MIT
- buffer-equal-constant-time BSD-3-Clause
- bytes MIT
- call-bind-apply-helpers MIT
- call-bound MIT
- camelcase MIT
- cliui ISC
- cluster-key-slot Apache-2.0
- color-convert MIT
- color-name MIT
- colyseus MIT
- connect-redis MIT
- content-disposition MIT
- content-type MIT
- cookie MIT
- cookie-signature MIT
- debug MIT
- decamelize MIT
- denque Apache-2.0
- depd MIT
- detect-libc Apache-2.0
- dijkstrajs MIT
- dotenv BSD-2-Clause
- dunder-proto MIT
- ecdsa-sig-formatter Apache-2.0
- ee-first MIT
- elliptic MIT
- emoji-regex MIT
- encodeurl MIT
- es-define-property MIT
- es-errors MIT
- es-object-atoms MIT
- escape-html MIT
- etag MIT
- eventemitter2 MIT
- express MIT
- express-jwt MIT
- express-session MIT
- express-unless MIT
- fdir MIT
- finalhandler MIT
- find-up MIT
- forwarded MIT
- fresh MIT
- fsevents MIT
- function-bind MIT
- get-caller-file ISC
- get-intrinsic MIT
- get-proto MIT
- gopd MIT
- grant MIT
- has-symbols MIT
- hash.js MIT
- hasown MIT
- hmac-drbg MIT
- http-errors MIT
- iconv-lite MIT
- inherits ISC
- ioredis MIT
- ipaddr.js MIT
- is-core-module MIT
- is-fullwidth-code-point MIT
- is-promise MIT
- jsonwebtoken MIT
- jwa MIT
- jwk-to-pem Apache-2.0
- jws MIT
- lightningcss MPL-2.0
- lightningcss-android-arm64 MPL-2.0
- lightningcss-darwin-arm64 MPL-2.0
- lightningcss-darwin-x64 MPL-2.0
- lightningcss-freebsd-x64 MPL-2.0
- lightningcss-linux-arm-gnueabihf MPL-2.0
- lightningcss-linux-arm64-gnu MPL-2.0
- lightningcss-linux-arm64-musl MPL-2.0
- lightningcss-linux-x64-gnu MPL-2.0
- lightningcss-linux-x64-musl MPL-2.0
- lightningcss-win32-arm64-msvc MPL-2.0
- lightningcss-win32-x64-msvc MPL-2.0
- locate-path MIT
- lodash MIT
- lodash.includes MIT
- lodash.isboolean MIT
- lodash.isinteger MIT
- lodash.isnumber MIT
- lodash.isplainobject MIT
- lodash.isstring MIT
- lodash.once MIT
- lru-cache ISC
- math-intrinsics MIT
- media-typer MIT
- merge-descriptors MIT
- mime-db MIT
- mime-types MIT
- minimalistic-assert ISC
- minimalistic-crypto-utils MIT
- module-details-from-path MIT
- ms MIT
- msgpackr MIT
- msgpackr-extract MIT
- nanoid MIT
- negotiator MIT
- node-gyp-build-optional-packages MIT
- node-os-utils MIT
- oauth-sign Apache-2.0
- object-inspect MIT
- on-finished MIT
- on-headers MIT
- once ISC
- p-limit MIT
- p-locate MIT
- p-try MIT
- parseurl MIT
- path-exists MIT
- path-parse MIT
- path-to-regexp MIT
- picocolors ISC
- picomatch MIT
- pngjs MIT
- postcss MIT
- proxy-addr MIT
- qrcode MIT
- qs BSD-3-Clause
- random-bytes MIT
- range-parser MIT
- raw-body MIT
- redis-errors MIT
- redis-parser MIT
- request-compose Apache-2.0
- request-oauth Apache-2.0
- require-directory MIT
- require-in-the-middle MIT
- require-main-filename ISC
- resolve MIT
- rolldown MIT
- rou3 MIT
- router MIT
- safe-buffer MIT
- safer-buffer MIT
- semver ISC
- send MIT
- serve-static MIT
- set-blocking ISC
- set-cookie-parser MIT
- setprototypeof ISC
- shimmer BSD-2-Clause
- side-channel MIT
- side-channel-list MIT
- side-channel-map MIT
- side-channel-weakmap MIT
- signal-exit ISC
- source-map-js BSD-3-Clause
- standard-as-callback MIT
- statuses MIT
- string-width MIT
- strip-ansi MIT
- supports-preserve-symlinks-flag MIT
- tinyglobby MIT
- toidentifier MIT
- tslib 0BSD
- type-is MIT
- uid-safe MIT
- undici-types MIT
- unpipe MIT
- uuid MIT
- uWebSockets.js Apache-2.0
- vary MIT
- vite MIT
- which-module ISC
- wrap-ansi MIT
- wrappy ISC
- ws MIT
- y18n ISC
- yallist ISC
- yargs MIT
- yargs-parser ISC
- zod MIT