- Added an explicit server adapter API for platform-specific runtimes.
- Player creation and remote hydration now support adapter-owned subclasses while preserving the public
Playertype. - Added an explicit client adapter API and removed the built-in
ClientPlayersingleton. - Added client UI bridges for markers, blips, and notifications.
- Added lifecycle services for NPC and Vehicle management.
- Improved Player management with spawn, teleport, and respawn actions.
Server.init()now acceptsadapterto install a single server adapter during bootstrap.- Added public server adapter helpers in
@open-core/framework/serverfor custom adapter packages. - Added adapter-aware Player serialization hooks for CORE/RESOURCE flows.
Client.init()now acceptsadapterto install a single client adapter during bootstrap.- Added client runtime bridge contracts so event processors, WebView callbacks, key mappings, and ticks no longer depend directly on CFX globals.
- Added client UI bridges for markers, blips, and notifications.
- Added lifecycle services and contracts for NPC and Vehicle management.
- Added
ISpawnActionsinterface and implementation for managing player spawn, teleport, and respawn actions. - Added
ClientLoggerBridgeto abstract client-side logging from direct console calls. - Added
playerCommandruntime event. - Added RedM-specific ped appearance adapter and client services for RDR3 profile appearance logic.
- Added runtime platform and game profile detection with duplicate DI registration prevention.
- Added
useAdapter()function to pre-set the client adapter before initialization. - Added project-level adapter injection and runtime hints for server and client adapters.
- Added WebView abstraction for client UI interactions.
- Renamed routing bucket methods to dimension.
- Added dedicated client and server contract files with updated exports and package entry points.
- Server bootstrap now defaults to the built-in Node adapter when no explicit runtime adapter is provided.
- Platform-specific Player APIs should move into adapter packages through Player subclassing/module augmentation.
ClientPlayeris no longer exported from@open-core/framework/client.- Client bootstrap no longer uses
register-client-capabilities; external adapters should be installed throughClient.init({ adapter }). WebViewBridgeis now the preferred embedded UI abstraction;OnViewnow represents WebView callbacks directly, whileNuiBridgeandNUIremain as deprecated compatibility aliases.
- Fixed lint issues and removed unused variables.
- Fixed exportation issues.
- Added tests for lint and unused variable fixes.
- Migration path for external adapters:
- Create an adapter with
defineServerAdapter({ name, register(ctx) { ... } }). - Register platform contracts inside
register(ctx)withbindSingleton,bindInstance, orbindMessagingTransport. - If you extend
Player, providectx.usePlayerAdapter({ createLocal, createRemote, serialize, hydrate }). - Pass the adapter to
Server.init({ mode, adapter })in both CORE and RESOURCE resources.
- Create an adapter with
- RESOURCE hydration now validates adapter identity before rebuilding remote
Playerinstances. - Client adapter migration path:
- Create an adapter with
defineClientAdapter({ name, register(ctx) { ... } }). - Register transport, appearance, hashing, and runtime bridge contracts inside
register(ctx). - Pass the adapter to
Client.init({ mode, adapter }).
- Create an adapter with
- Client files now safe to remove from core once moved to external adapter packages:
src/adapters/register-client-capabilities.tssrc/adapters/fivem/fivem-ped-appearance-client.tssrc/adapters/redm/redm-ped-appearance-client.tssrc/adapters/node/node-ped-appearance-client.ts- Any remaining client-only transport/runtime bindings that your external adapter reimplements.