Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
df13868
feat: Introduce RedM-specific ped appearance adapter and adapt client…
Flussen Mar 4, 2026
bc4636f
feat: Introduce runtime platform and game profile detection, integrat…
Flussen Mar 4, 2026
fc87911
feat: Add server runtime adapter layer for environment abstraction
Flussen Mar 9, 2026
7ac066c
feat: Implement explicit client and server adapter APIs, deprecate th…
Flussen Mar 9, 2026
b859433
feat: Introduce WebView abstraction for client UI interactions and en…
Flussen Mar 9, 2026
889c496
refactor: rename routing bucket methods to dimension for consistency …
Flussen Mar 10, 2026
554d6b8
refactor: Introduce adapter contracts for server, client, and transpo…
Flussen Mar 10, 2026
0693385
fix: exportation fix
Flussen Mar 10, 2026
d240014
refactor: Replace IRuntimeInfo and IPlatformCapabilities with IPlatfo…
Flussen Mar 11, 2026
15877f3
refactor: lazy load the Node client adapter using dynamic imports
Flussen Mar 11, 2026
215e9eb
feat: Introduce project-level adapter injection and runtime hints for…
Flussen Mar 12, 2026
acd4d90
feat: add useAdapter function and update init to support pending adapter
Ivanruii Mar 13, 2026
090c356
Merge branch 'v1-beta' of github.com:newcore-network/opencore into v1…
Ivanruii Mar 13, 2026
0290cc2
Revert "Merge branch 'v1-beta' of github.com:newcore-network/opencore…
Ivanruii Mar 13, 2026
e284d7a
feat: bucket replace to dimension
Flussen Mar 13, 2026
5caf01f
refactor: introduce Client Interfaces in Contracts for platform-agnos…
Flussen Mar 13, 2026
8792ae6
fix: linter
Flussen Mar 13, 2026
e225f1a
refactor: Dynamically generate from all
Flussen Mar 13, 2026
7c0f846
feat: add playerCommand runtime event and improve tsyringe type safet…
Flussen Mar 13, 2026
d716a16
fix: lint
Flussen Mar 13, 2026
0424885
feat: allow pre-setting the client adapter via before initialization
Flussen Mar 14, 2026
94fb4c1
feat: Introduce public kernel and contracts entry points, refactor t…
Flussen Mar 14, 2026
b4f5627
refactor: reorganize contracts into dedicated client and server files…
Flussen Mar 14, 2026
ee43f5b
feat: Introduce and integrate to abstract client-side logging from d…
Flussen Mar 14, 2026
868d838
refactor: abstract client-side spawn, teleport, and respawn operation…
Flussen Mar 14, 2026
5c648fd
feat: Introduce interface and implementation for managing player sp…
Flussen Mar 14, 2026
feb5355
feat: Introduce dedicated lifecycle services and contracts for NPC an…
Flussen Mar 14, 2026
8b92f7b
feat: Introduce client UI bridges and server player state/appearance …
Flussen Mar 14, 2026
ea31497
fix: lint and remove unused variables + test
Flussen Mar 14, 2026
d646b66
refactor: Use Players API for player target resolution in lifecycle s…
Flussen Mar 14, 2026
0ac69ef
refactor: remove player sync controller and adds network event loggi…
Flussen Mar 14, 2026
aa799b0
refactor: client marker and blip management to use ID-based APIs and …
Flussen Mar 16, 2026
8e36a52
refactor: client notification service to use a unified bridge interfa…
Flussen Mar 16, 2026
3434bf4
docs: release updated
Flussen Mar 18, 2026
230e53b
style: remove extraneous newlines in blip service and node client ada…
Flussen Mar 18, 2026
039e800
refactor: remove Players dependency and simplify player target resolu…
Flussen Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 49 additions & 49 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
## OpenCore Framework v1.0.5-beta.1
## OpenCore Framework v1.0.5-beta.2

### Highlights

- Major runtime evolution with channels, RPC/events transport, plugins, and library APIs.
- Large architecture and cleanup pass across the codebase.
- Expanded benchmark coverage and refreshed benchmark results for this beta cycle.
- Clearer separation between public API surface and runtime implementations (ports/contracts vs local/remote implementations).
- Core runtime primitives are now more explicit and reusable (`BaseEntity`, `Spatial`, `World`, library core).
- Added an explicit server adapter API for platform-specific runtimes.
- Player creation and remote hydration now support adapter-owned subclasses while preserving the public `Player` type.
- Added an explicit client adapter API and removed the built-in `ClientPlayer` singleton.
- 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.

### New Features

- Channels and chat API ecosystem:
- Added a comprehensive channel system (radio, phone, team, admin, proximity).
- Added communication controller examples and extensive JSDoc for channel APIs.
- Exported channel API ports and removed legacy channel implementation paths.
- Messaging transport and RPC/events:
- Introduced a unified messaging transport architecture with `EventsAPI` and `RpcAPI`.
- Added stronger typed runtime contexts for server/client events and RPC.
- Added/expanded RPC decorator and handler support (`@OnRPC`) with integration tests.
- Runtime surface expansion:
- Consolidated core concepts around reusable runtime primitives (`BaseEntity`, `Spatial`, `World`) exported from runtime core.
- Added Appearance API wrapper for validation/apply/reset flows.
- Added Camera and Cinematic services, cinematic builder, and typed lifecycle payloads.
- Added ped abstractions (Cfx + Node implementations) and server-side NPC lifecycle APIs.
- Added first-class runtime library factories (`createServerLibrary`, `createClientLibrary`) and dedicated library event bus/processors.
- Public API boundary and port model:
- Server public API now explicitly exports API ports (`players.api-port`, `authorization.api-port`, `channel.api-port`) through `runtime/server/api`.
- Internal runtime ports were isolated under `ports/internal` (`command-execution`, `player-session-lifecycle`) to mark non-public contracts.
- Runtime services were moved toward explicit local/remote implementations under `runtime/server/implementations/*`.
- Security and validation flow:
- Principal/authorization and command/net validation paths were tightened through contract-based security handlers and observers.
- Runtime config and validation behavior were expanded and benchmarked (including validation-heavy and error-path scenarios).
- Plugin model:
- Added server plugin kernel MVP with extensible API hooks.
- Added client-side plugin system and plugin lifecycle hook after server initialization.
- Autoload and developer experience:
- Added autoload for user server controllers.
- Improved client controller autoloading and metadata scanning error handling.
- Benchmark system:
- Added broad benchmark suites for BinaryService, SchemaGenerator, EntitySystem, AppearanceValidation, EventInterceptor, RuntimeConfig.
- Added load benchmarks for RPC concurrency, validation, and request lifecycle.
- `Server.init()` now accepts `adapter` to install a single server adapter during bootstrap.
- Added public server adapter helpers in `@open-core/framework/server` for custom adapter packages.
- Added adapter-aware Player serialization hooks for CORE/RESOURCE flows.
- `Client.init()` now accepts `adapter` to 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 `ISpawnActions` interface and implementation for managing player spawn, teleport, and respawn actions.
- Added `ClientLoggerBridge` to abstract client-side logging from direct console calls.
- Added `playerCommand` runtime 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.

### Breaking Changes
- 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.
- `ClientPlayer` is no longer exported from `@open-core/framework/client`.
- Client bootstrap no longer uses `register-client-capabilities`; external adapters should be installed through `Client.init({ adapter })`.
- `WebViewBridge` is now the preferred embedded UI abstraction; `OnView` now represents WebView callbacks directly, while `NuiBridge` and `NUI` remain as deprecated compatibility aliases.

- Service-to-API/implementation migration in multiple modules (notably `*Service` naming changes).
- Channel/chat APIs were renamed and moved (`ChannelService` -> `Channels`, `ChatService` -> `Chat`, moved to `apis/`).
- Transport contracts changed from legacy net transport shape to MessagingTransport + Events/RPC APIs.
- Port/file naming was normalized (`player-directory` -> `players.api-port`, `principal.port` -> `authorization.api-port`, plus related API file renames).
- Public vs internal contracts are stricter: `api-port` exports are public surface, while `ports/internal/*` are runtime internals and should not be consumed directly.
- Deprecated methods, stale docs, and obsolete examples were removed.
- Import paths and shared types were normalized/centralized (including parallel compute types and decorator/binary file naming updates).
### Bug Fixes
- Fixed lint issues and removed unused variables.
- Fixed exportation issues.
- Added tests for lint and unused variable fixes.

### Notes

This beta is a major milestone for OpenCore: cleaner runtime boundaries, stronger extension points, and richer communication primitives while keeping decorator-driven DX.

Simple CLI context: OpenCore CLI now supports cleaner non-interactive build output for CI environments (for example `opencore build --output=plain`).
- Migration path for external adapters:
1. Create an adapter with `defineServerAdapter({ name, register(ctx) { ... } })`.
2. Register platform contracts inside `register(ctx)` with `bindSingleton`, `bindInstance`, or `bindMessagingTransport`.
3. If you extend `Player`, provide `ctx.usePlayerAdapter({ createLocal, createRemote, serialize, hydrate })`.
4. Pass the adapter to `Server.init({ mode, adapter })` in both CORE and RESOURCE resources.
- RESOURCE hydration now validates adapter identity before rebuilding remote `Player` instances.
- Client adapter migration path:
1. Create an adapter with `defineClientAdapter({ name, register(ctx) { ... } })`.
2. Register transport, appearance, hashing, and runtime bridge contracts inside `register(ctx)`.
3. Pass the adapter to `Client.init({ mode, adapter })`.
- Client files now safe to remove from core once moved to external adapter packages:
- `src/adapters/register-client-capabilities.ts`
- `src/adapters/fivem/fivem-ped-appearance-client.ts`
- `src/adapters/redm/redm-ped-appearance-client.ts`
- `src/adapters/node/node-ped-appearance-client.ts`
- Any remaining client-only transport/runtime bindings that your external adapter reimplements.
24 changes: 21 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@open-core/framework",
"version": "1.0.5-beta.1",
"version": "1.0.5-beta.2",
"description": "Secure, event-driven TypeScript Framework & Runtime engine for CitizenFX (Cfx).",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down Expand Up @@ -34,6 +34,26 @@
"import": "./dist/runtime/client/index.js",
"require": "./dist/runtime/client/index.js"
},
"./contracts": {
"types": "./dist/contracts.d.ts",
"import": "./dist/contracts.js",
"require": "./dist/contracts.js"
},
"./contracts/client": {
"types": "./dist/contracts/client.d.ts",
"import": "./dist/contracts/client.js",
"require": "./dist/contracts/client.js"
},
"./contracts/server": {
"types": "./dist/contracts/server.d.ts",
"import": "./dist/contracts/server.js",
"require": "./dist/contracts/server.js"
},
"./kernel": {
"types": "./dist/kernel-public.d.ts",
"import": "./dist/kernel-public.js",
"require": "./dist/kernel-public.js"
},
"./package.json": "./package.json"
},
"scripts": {
Expand Down Expand Up @@ -79,8 +99,6 @@
},
"devDependencies": {
"@biomejs/biome": "^2.3.11",
"@citizenfx/client": "2.0.22443-1",
"@citizenfx/server": "2.0.22443-1",
"@types/node": "^25.0.3",
"@vitest/coverage-v8": "^4.0.16",
"dependency-cruiser": "^17.3.6",
Expand Down
16 changes: 0 additions & 16 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

70 changes: 0 additions & 70 deletions src/adapters/cfx/cfx-capabilities.ts

This file was deleted.

110 changes: 0 additions & 110 deletions src/adapters/cfx/cfx-platform.ts

This file was deleted.

3 changes: 0 additions & 3 deletions src/adapters/cfx/index.ts

This file was deleted.

Loading
Loading