Skip to main content

CLI

The Vircadia World CLI provides a set of commands to manage the Vircadia World's services in dev and production environments.

Prerequisites​

Quick Start​

bun run install:all
bun run build:sdk
bun run server:init

Then test your setup by running the following command:

bun run server:health-all

Then run the test client:

bun run dev:client:web_babylon_js

You can also run the client in a second tab to test the syncing of the state between the two clients.

Resetting the World​

To reset the world, run the following command, only resetting the database:

bun run server:postgres:reset

If you need to do a full reset, you can run the following command, which will rebuild all the services and reset the database:

bun run server:rebuild-all

Available Commands​

danger

Currently, there are no warnings about the destructiveness of some of these commands, thus you should understand what you are doing before running them.

Install Commands​

CommandDescription
bun run install:allbun run install:repo
bun run install:repocd ../ && bun install
bun run install:sdkcd ../sdk/vircadia-world-sdk-ts && bun install
bun run install:server:apicd ../server/service/api/volume/app && bun install
bun run install:server:statecd ../server/service/state/volume/app && bun install
bun run install:clibun install
bun run install:client:web_babylon_jscd ../client/web_babylon_js && bun install

Dev Commands​

CommandDescription
bun run dev:client:web_babylon_jsexport VRCA_CLIENT_WEB_BABYLON_JS_DEBUG_SESSION_TOKEN=$(bun run server:postgres:system-token true) && bun vircadia.cli.ts client:set-uri && cd ../client/web_babylon_js/ && bun run dev

Test Commands​

CommandDescription
bun run test:0_cli_server_unitbun test ./test/0_test_cli_server_unit.ts
bun run test:1_db_unitbun run server:run-command down vircadia_world_api_manager vircadia_world_state_manager && bun test ./test/1_test_db_unit.ts && bun run server:run-command up vircadia_world_api_manager vircadia_world_state_manager -d

Server Commands​

CommandDescription
bun run server:run-commandVRCA_CLI_DEBUG=1 bun vircadia.cli.ts server:run-command
bun run server:initbun run build:server:api && bun run build:server:state && bun run server:run-command up --build vircadia_world_postgres -d && bun run server:postgres:health && bun run server:postgres:migrate && bun run server:postgres:seed:sql && bun run server:postgres:seed:assets && bun run server:run-command up --build vircadia_world_api_manager -d && bun run server:run-command up --build vircadia_world_state_manager -d && bun run server:run-command up --build vircadia_world_pgweb -d
bun run server:rebuild-allbun run server:run-command down -v && bun run server:init
bun run server:health-allbun run server:world-api-manager:health && bun run server:world-state-manager:health && bun run server:pgweb:health && bun run server:postgres:health
bun run server:world-api-manager:healthbun vircadia.cli.ts server:world-api-manager:health
bun run server:world-state-manager:healthbun vircadia.cli.ts server:world-state-manager:health
bun run server:pgweb:healthbun vircadia.cli.ts server:pgweb:health
bun run server:pgweb:access-commandbun vircadia.cli.ts server:pgweb:access-command

Server Postgres Commands​

CommandDescription
bun run server:postgres:backupbun run server:run-command down vircadia_world_api_manager vircadia_world_state_manager vircadia_world_pgweb && bun vircadia.cli.ts server:postgres:backup && bun run server:run-command up -d
bun run server:postgres:restorebun run server:run-command down vircadia_world_api_manager vircadia_world_state_manager vircadia_world_pgweb && bun vircadia.cli.ts server:postgres:restore && bun run server:run-command up -d
bun run server:postgres:resetbun run server:run-command down vircadia_world_api_manager vircadia_world_state_manager vircadia_world_pgweb && bun run server:postgres:wipe && bun run server:postgres:migrate && bun run server:postgres:seed:sql && bun run server:postgres:seed:assets && bun run server:run-command up -d
bun run server:postgres:healthbun vircadia.cli.ts server:postgres:health
bun run server:postgres:migratebun vircadia.cli.ts server:postgres:migrate
bun run server:postgres:wipebun vircadia.cli.ts server:postgres:wipe
bun run server:postgres:connection-stringbun vircadia.cli.ts server:postgres:connection-string
bun run server:postgres:system-tokenbun vircadia.cli.ts server:postgres:system-token
bun run server:postgres:system-token:invalidate-allbun vircadia.cli.ts server:postgres:system-token:invalidate-all
bun run server:postgres:seed:sqlbun vircadia.cli.ts server:postgres:seed:sql
bun run server:postgres:seed:assetsbun vircadia.cli.ts server:postgres:seed:assets
bun run server:postgres:seed:assets:by-groupbun vircadia.cli.ts server:postgres:seed:assets --sync-group

Client Commands​

CommandDescription
bun run client:set-uribun vircadia.cli.ts client:set-uri

Clean Commands​

CommandDescription
bun run clean:allbun run clean:repo
bun run clean:repocd ../ && rm -rf node_modules
bun run clean:sdkcd ../sdk/vircadia-world-sdk-ts && rm -rf node_modules && rm -rf dist
bun run clean:client:web_babylon_jscd ../client/web_babylon_js && rm -rf node_modules
bun run clean:clirm -rf node_modules

Build Commands​

CommandDescription
bun run build:allbun run build:sdk && bun run build:server:api && bun run build:server:state
bun run build:sdkcd ../sdk/vircadia-world-sdk-ts && bun run build
bun run build:server:apicd ../server/service/api/volume/app && bun run build
bun run build:server:statecd ../server/service/state/volume/app && bun run build

Configuration​

The CLI can be configured by setting the environment variables before using the CLI.

vircadia.cli.config.ts
import path, { dirname } from "node:path";
import { fileURLToPath } from "node:url";
import { z } from "zod";
import { serverConfiguration } from "../sdk/vircadia-world-sdk-ts/bun/src/config/vircadia.server.config";

// CLI environment schema
const cliEnvSchema = z.object({
VRCA_CLI_DEBUG: z
.union([
z.boolean(),
z
.string()
.transform(
(val) => val === "1" || val.toLowerCase() === "true",
),
])
.default(false),
VRCA_CLI_SUPPRESS: z
.union([
z.boolean(),
z
.string()
.transform(
(val) => val === "1" || val.toLowerCase() === "true",
),
])
.default(false),
VRCA_CLI_SERVICE_POSTGRES_HOST: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_HOST_CONTAINER_BIND_EXTERNAL,
),
VRCA_CLI_SERVICE_POSTGRES_PORT: z.coerce
.number()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_PORT_CONTAINER_BIND_EXTERNAL,
),
VRCA_CLI_SERVICE_POSTGRES_DATABASE: z
.string()
.default(serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_DATABASE),
VRCA_CLI_SERVICE_POSTGRES_SUPER_USER_USERNAME: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_USERNAME,
),
VRCA_CLI_SERVICE_POSTGRES_SUPER_USER_PASSWORD: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_SUPER_USER_PASSWORD,
),

VRCA_CLI_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_USERNAME,
),
VRCA_CLI_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_POSTGRES_AGENT_PROXY_USER_PASSWORD,
),

VRCA_CLI_SERVICE_POSTGRES_BACKUP_FILE: z
.string()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/backup/backup.sql",
),
),
VRCA_CLI_SERVICE_POSTGRES_RESTORE_FILE: z
.string()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/backup/backup.sql",
),
),
VRCA_CLI_SERVICE_POSTGRES_MIGRATION_DIR: z
.string()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/migration",
),
),
VRCA_CLI_SERVICE_POSTGRES_SEED_SYSTEM_SQL_DIR: z
.string()
.nullable()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/seed/sql/",
),
),
VRCA_CLI_SERVICE_POSTGRES_SEED_USER_SQL_DIR: z
.string()
.nullable()
.default(null),
VRCA_CLI_SERVICE_POSTGRES_SEED_SYSTEM_ASSET_DIR: z
.string()
.nullable()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/seed/asset/",
),
),
VRCA_CLI_SERVICE_POSTGRES_SEED_USER_ASSET_DIR: z
.string()
.nullable()
.default(null),
VRCA_CLI_SERVICE_POSTGRES_SYNC_ASSET_DIR: z
.string()
.nullable()
.default(null),

VRCA_CLI_SERVICE_POSTGRES_SYSTEM_RESET_DIR: z
.string()
.nullable()
.default(
path.join(
dirname(fileURLToPath(import.meta.url)),
"./database/reset",
),
),
VRCA_CLI_SERVICE_POSTGRES_USER_RESET_DIR: z
.string()
.nullable()
.default(null),

VRCA_CLI_SERVICE_PGWEB_HOST: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_PGWEB_HOST_CONTAINER_BIND_EXTERNAL,
),
VRCA_CLI_SERVICE_PGWEB_PORT: z.coerce
.number()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_PGWEB_PORT_CONTAINER_BIND_EXTERNAL,
),

VRCA_CLI_SERVICE_WORLD_API_MANAGER_HOST: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_WORLD_API_MANAGER_HOST_PUBLIC_AVAILABLE_AT,
),
VRCA_CLI_SERVICE_WORLD_API_MANAGER_PORT: z.coerce
.number()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_WORLD_API_MANAGER_PORT_PUBLIC_AVAILABLE_AT,
),

VRCA_CLI_SERVICE_WORLD_STATE_MANAGER_HOST: z
.string()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_HOST_CONTAINER_BIND_EXTERNAL,
),
VRCA_CLI_SERVICE_WORLD_STATE_MANAGER_PORT: z.coerce
.number()
.default(
serverConfiguration.VRCA_SERVER_SERVICE_WORLD_STATE_MANAGER_PORT_CONTAINER_BIND_EXTERNAL,
),
});
export const cliConfiguration = cliEnvSchema.parse(process.env);