Skip to main content
Create tableverse.config.ts in your project root and export defineConfig(...) as the default value.
defineConfig returns the object unchanged. Its purpose is type checking and editor completion.

Top-level fields

You can use tvk validate without publish. tvk dev uses publish.frontend to start the frontend. tvk upload packages the project root and sends the publish settings to Tableverse.

Engine source

engine is the engine workspace directory, relative to tableverse.config.ts. Point it at the engine workspace source. Tableverse creates the sandbox bundle.

Frontend source

frontend is the frontend source directory, relative to the config file. Build your frontend with Vite. tvk reads the build output directory from your project’s own Vite config, so your config file never names it. Tableverse rebuilds the frontend from the uploaded source and serves that build output. The CLI leaves the build output out of the upload.

Workspace and lockfile

Keep tableverse.config.ts, package.json, and package-lock.json in the project root. The root package.json declares the engine and client as npm workspaces:
The client can depend on the engine workspace for compile-time game types:
The project source archive includes the root lockfile and both workspaces, so Tableverse installs one dependency graph before building the engine and frontend.

Config discovery

Keep one tableverse.config.ts in the project root. The CLI searches the current directory and its parents until it finds that file. You can run tvk from the project root, engine/, client/, or another directory inside the project. The engine and frontend paths resolve from the project root.
tvk upload stores game identity in .tableverse/game.json. TABLEVERSE_GAME_ID overrides the saved identity.