Babylon.js Client
This client serves to be a generally accessible and usable client to use with games and worlds.
It also serves as an example of how to use the Vircadia World SDK in a web application using Babylon.js.
Configure
vircadia.browser.config.ts
import { z } from "zod";
// Browser Client environment schema
const clientBrowserEnvSchema = z.object({
// Web Babylon JS Client
VRCA_CLIENT_WEB_BABYLON_JS_DEBUG: z
.union([
z.boolean(),
z
.string()
.transform(
(val) => val === "1" || val.toLowerCase() === "true",
),
])
.default(false),
VRCA_CLIENT_WEB_BABYLON_JS_SUPPRESS: z
.union([
z.boolean(),
z
.string()
.transform(
(val) => val === "1" || val.toLowerCase() === "true",
),
])
.default(false),
VRCA_CLIENT_WEB_BABYLON_JS_DEBUG_SESSION_TOKEN: z.string().default(""),
VRCA_CLIENT_WEB_BABYLON_JS_DEBUG_SESSION_TOKEN_PROVIDER: z
.string()
.default("system"),
VRCA_CLIENT_WEB_BABYLON_JS_META_TITLE_BASE: z.string().default("Vircadia"),
VRCA_CLIENT_WEB_BABYLON_JS_META_DESCRIPTION: z.string().default("..."),
VRCA_CLIENT_WEB_BABYLON_JS_META_OG_IMAGE: z
.string()
.default("/brand/logo_icon.webp"),
VRCA_CLIENT_WEB_BABYLON_JS_META_OG_TYPE: z.string().default("website"),
VRCA_CLIENT_WEB_BABYLON_JS_META_FAVICON: z
.string()
.default("/brand/favicon.svg"),
VRCA_CLIENT_WEB_BABYLON_JS_APP_URL: z
.string()
.url()
.default("https://app.vircadia.com"),
VRCA_CLIENT_WEB_BABYLON_JS_DEFAULT_WORLD_API_URI: z
.string()
.default("localhost:3020"),
VRCA_CLIENT_WEB_BABYLON_JS_DEFAULT_WORLD_API_URI_USING_SSL: z
.union([
z.boolean(),
z
.string()
.transform(
(val) => val === "1" || val.toLowerCase() === "true",
),
])
.default(false),
VRCA_CLIENT_WEB_BABYLON_JS_PROD_HOST: z.string().default("0.0.0.0"),
VRCA_CLIENT_WEB_BABYLON_JS_PROD_PORT: z.coerce.number().default(3025),
// Development Web Babylon JS Client
VRCA_CLIENT_WEB_BABYLON_JS_DEV_HOST: z.string().default("0.0.0.0"),
VRCA_CLIENT_WEB_BABYLON_JS_DEV_PORT: z.coerce.number().default(3066),
});
// Parse client environment variables
export const clientBrowserConfiguration = clientBrowserEnvSchema.parse(
// Fix TypeScript error with appropriate typing
(typeof import.meta !== "undefined"
? (import.meta as { env?: Record<string, unknown> }).env
: undefined) ?? process.env,
);
Development Environment
Recommended IDE Setup
VSCode + Volar (and disable Vetur).
Type Support for .vue
Imports in TS
TypeScript cannot handle type information for .vue
imports by default, so we replace the tsc
CLI with vue-tsc
for type checking. In editors, we need Volar to make the TypeScript language service aware of .vue
types.
Customize configuration
See Vite Configuration Reference.
Project Setup
bun install
Compile and Hot-Reload for Development
bun dev
Type-Check, Compile and Minify for Production
bun run build