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
Keeptableverse.config.ts, package.json, and package-lock.json in the project root. The root package.json declares the engine and client as npm workspaces:
Config discovery
Keep onetableverse.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.