Local development
Toolchain
- PowerShell 7, .NET SDK
10.0.302(global.jsondisables roll-forward). - Unity
6000.3.20f1revisionc9ba695d4f07. - Rider: open
ProjectV-SDK.slnx. There is no Unity project in this repository; check Unity behaviour in ProjectV-Client.
Shared inputs
The shared CrossSDK assemblies and the generator engine are consumed as
binaries. Build them once into the git-ignored .local/:
DOTNET_BIN=<dotnet 10.0.302> tools/bootstrap-local.sh <ProjectZ-CrossSDK checkout>
The script checks the pinned commits out into a temporary clone and
hash-verifies the shared assemblies against the lock. Re-run it after a lock
bump. Explicit CROSSSDK_SHARED_ASSEMBLIES_ROOT,
CROSSSDK_GENERATOR_ENGINE_ARTIFACT_ROOT or MR05_CANDIDATE_HANDOFF_ROOT
override .local/.
To move to a new Shared candidate, run ci/update-shared-runtime.py with the
candidate identity on a branch from v3; it updates the shared lock and
inputs together.
Tests
ci/run-projectv-tests.sh # verification suites
ci/run-generator-gates.sh # typed-binding drift + contract gate
Pass the .local/ roots as documented in each script. Live backend suites
(ci/run-fresh-backend-live.sh) need a running ProjectV Nakama V3.
Try changes in the game
pwsh tools/dev-pack-local.ps1 -ClientProject <ProjectV-Client checkout>
It compiles the packages in a cached Unity host, copies the DLLs over unpacked
copies of the game's own tarballs (keeping every .meta GUID), and points the
game's ProjectV entries at them. Add -Platforms Android,iOS before a device
build; -Unlink restores the manifest. The output is not a release
candidate. tools/ios-device-run.sh <game> --dev-pack builds, signs and
launches on a connected iPhone.
Full local flow
Before you push a runtime change, run the whole chain locally:
local ProjectV Nakama V3 (projectz-nakama compose, port 17350)
-> SDK change (dev-pack or candidate)
-> ProjectV-Client: EditMode + PlayMode suites, then Login → Lobby → Campaign in Play Mode
The Client's live PlayMode tests use http://127.0.0.1:17350 with
projectv-v3-local-server-key.