Nova64's Unity bridge exists to let Nova64-authored JavaScript game code drive native Unity behavior implemented in C#.
The bridge is intentionally designed as a controlled host API, not as an arbitrary C# execution tunnel.
That distinction is the core architectural decision.
The target outcome is:
This is primarily a mobile-game strategy, not a general-purpose language bridge.
The bridge should not:
If a project needs custom native behaviors, those should be explicitly registered as trusted extension points.
The recommended runtime model is:
In practice, this means JS asks for operations like mesh creation, transform updates, input state, and audio playback, while Unity performs those operations natively.
For mobile games, the controlled-bridge approach is the right tradeoff because it improves:
The bridge should be:
Resources such as meshes, materials, textures, cameras, and audio sources should be represented as opaque IDs or handles when they cross the boundary.
JS should not hold live Unity objects.
JS should enqueue commands during update work, and the host should flush and execute them in a predictable phase.
This avoids excessive per-call overhead and keeps mobile frame times stable.
Only approved host methods should be callable. The bridge should expose a deliberate contract, not a raw scripting backdoor.
Operations should align with a frame lifecycle such as:
Payloads should be plain JSON-like structures or binary payloads where needed. Avoid graph synchronization and runtime object proxying.
Nova64 already has a natural seam for this work in the engine adapter.
Current implementation points:
runtime/engine-adapter.jscreateUnityBridgeAdapter(bridge, options)installUnityBridge(bridge, options)resetEngineAdapter()Current host-oriented method names supported by the adapter:
material.createtexture.createDatatexture.createCanvastexture.clonetexture.setRepeattexture.invalidategeometry.createPlanemesh.setMaterialcamera.getPositionCurrent supported transport shapes:
call(method, payload)invoke(method, payload)send(message)postMessage(message)This is a first slice, not the complete Unity runtime surface.
Build the minimum Unity host that can:
This phase proves transport, marshaling, and lifecycle.
Add the APIs needed for real mobile games:
This phase should focus on the smallest feature set required to ship a simple game.
Add:
If studio users need custom native behavior, expose explicit registered bridge endpoints in C#.
Do not add arbitrary C# execution.
For iOS and Android, this approach is viable and strong if the bridge stays disciplined.
The main risks are:
The mitigation is to keep the first versions small, measured, and batch-friendly.
Nova64 should treat Unity as a native host backend, not as a general C# execution target.
That means:
This is the architecture most likely to succeed for mobile game shipping.