{
 "title": "GAMPEON changelog",
 "home_page_url": "https://gampeon.com/changelog/",
 "updated": "2026-11-06T18:33:45Z",
 "entries": [
  {
   "id": "engine/30#0",
   "date": "2026-11-06T18:33:45Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Supply crates now hold loot. Search a crate with E to put its items into your inventory, and press Tab to see what you carry."
  },
  {
   "id": "engine/29#0",
   "date": "2026-11-06T18:25:30Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Hold E to use objects. The sandbox test now has supply crates you can open and close, and everyone nearby sees it."
  },
  {
   "id": "engine/28#0",
   "date": "2026-11-06T18:04:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "Other players no longer appear in the wrong place in the game client."
  },
  {
   "id": "engine/27#0",
   "date": "2026-11-06T17:42:29Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "The test world is easier to read: shadowed sides are no longer black, boxes and walls have colors, and other players have a light body with a red visor that shows where they look."
  },
  {
   "id": "platform/43#0",
   "date": "2026-11-06T17:17:01Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Voice channels in communities: join with one click, talk and share your screen or a window with sound (launcher, 16 and older during the test)"
  },
  {
   "id": "platform/43#1",
   "date": "2026-11-06T17:17:01Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Moderators can mute members in voice and disconnect them, and anyone can report a person in a voice channel to GAMPEON."
  },
  {
   "id": "engine/26#0",
   "date": "2026-11-06T17:04:51Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Mouse look is calmer by default. The sensitivity can still be changed with `gp.MouseSensitivity` in the console."
  },
  {
   "id": "docs/58#0",
   "date": "2026-11-06T17:03:25Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The RP Starter docs now say it is MIT licensed."
  },
  {
   "id": "sdk/22#0",
   "date": "2026-11-06T17:02:59Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "The GAMPEON RP Starter is now MIT licensed, so server owners can change it and ship it with their servers."
  },
  {
   "id": "engine/25#0",
   "date": "2026-11-06T16:43:34Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "In the game, scripts can use `GetEntityForwardVector`, `GetEntityForwardX` and `GetEntityForwardY` on server and client."
  },
  {
   "id": "docs/56#0",
   "date": "2026-11-06T16:39:43Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The Lua reference documents `GetEntityForwardVector`, `GetEntityForwardX` and `GetEntityForwardY`, and explains that headings match the rotation in the Unreal editor."
  },
  {
   "id": "sdk/21#0",
   "date": "2026-11-06T16:39:40Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`GetEntityForwardVector`, `GetEntityForwardX` and `GetEntityForwardY` on server and client. Use them for \"in front of the player\" math; GAMPEON headings stay measured like the rotation in the Unreal editor (0 faces +x, 90 faces +y)."
  },
  {
   "id": "docs/55#0",
   "date": "2026-11-06T14:37:19Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The porting check docs explain the new list of framework calls that the RP Starter bridges do not cover yet."
  },
  {
   "id": "docs/55#1",
   "date": "2026-11-06T14:37:19Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The platform status page lists the playable game client as a preview."
  },
  {
   "id": "sdk/20#0",
   "date": "2026-11-06T14:36:46Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "The porting check now lists which framework calls in your resources the RP Starter bridges already cover, and which ones are still missing."
  },
  {
   "id": "sdk/20#1",
   "date": "2026-11-06T14:36:46Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "The RP Starter HUD no longer repeats the job name when the rank has the same name."
  },
  {
   "id": "engine/24#0",
   "date": "2026-11-06T14:35:39Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "The game client is now playable: walk with WASD, look around with the mouse and jump with Space."
  },
  {
   "id": "engine/24#1",
   "date": "2026-11-06T14:35:39Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Maps without their own lighting get a sun and sky, so the test world is no longer black."
  },
  {
   "id": "engine/24#2",
   "date": "2026-11-06T14:35:39Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Players see each other as simple figures until real character models arrive."
  },
  {
   "id": "docs/54#0",
   "date": "2026-11-06T14:32:47Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "New developer docs page RP Starter: a ready roleplay base with characters, money, jobs and inventory, plus bridges for existing roleplay resources."
  },
  {
   "id": "docs/54#1",
   "date": "2026-11-06T14:32:47Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The Exports page explains objects with methods, callbacks and waiting inside exports."
  },
  {
   "id": "docs/54#2",
   "date": "2026-11-06T14:32:47Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The test server page documents `gp_fakeplayer waitclient`, which waits for a test client's scripts instead of a fixed time."
  },
  {
   "id": "docs/54#3",
   "date": "2026-11-06T14:32:47Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The Lua reference is at version 0.9.0."
  },
  {
   "id": "sdk/19#0",
   "date": "2026-11-06T14:32:36Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "The GAMPEON RP Starter in the SDK (`starter/rp`): characters with a selection screen, cash and bank money, jobs with paychecks, a weight-based inventory, a HUD and admin commands, saved to MariaDB or a local database file."
  },
  {
   "id": "sdk/19#1",
   "date": "2026-11-06T14:32:36Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Existing resources written for the two most common roleplay frameworks can run on it: compatibility bridges provide the shared and player objects, callbacks, usable items, commands, locales and the usual events."
  },
  {
   "id": "sdk/19#2",
   "date": "2026-11-06T14:32:36Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Two example resources show framework-style scripts running unchanged."
  },
  {
   "id": "sdk/19#3",
   "date": "2026-11-06T14:32:36Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Test server: `gp_fakeplayer waitclient` waits until a test client's scripts are running, instead of a fixed wait."
  },
  {
   "id": "engine/23#0",
   "date": "2026-11-06T14:16:48Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "In the game, functions now work across resources: exports can return objects with methods, events can pass callbacks, and exports may wait. Common roleplay frameworks rely on this."
  },
  {
   "id": "engine/23#1",
   "date": "2026-11-06T14:16:48Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "The bundled oxmysql and mysql-async resources provide their exports in the game, so `exports.oxmysql:query(...)` and `exports['mysql-async']:mysql_fetch_all(...)` work."
  },
  {
   "id": "sdk/18#0",
   "date": "2026-11-06T14:07:53Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Functions now work across resources: exports can return objects with methods, and events can pass callbacks. The received function is a normal Lua function that runs in the resource it came from."
  },
  {
   "id": "sdk/18#1",
   "date": "2026-11-06T14:07:53Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Exports may now call `Wait`. A caller in a thread or event handler gets the result once the export finishes."
  },
  {
   "id": "sdk/18#2",
   "date": "2026-11-06T14:07:53Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "All oxmysql exports work, including `query_async` and `executeSync`, and the mysql-async exports `mysql_execute`, `mysql_fetch_all` and friends."
  },
  {
   "id": "sdk/18#3",
   "date": "2026-11-06T14:07:53Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "`resmon` shows how many of a resource's functions other resources hold."
  },
  {
   "id": "engine/22#0",
   "date": "2026-11-06T13:44:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Server scripts can place objects in the game world with `CreateObject`, `CreateObjectNoOffset`, `DeleteEntity` and `FreezeEntityPosition`."
  },
  {
   "id": "engine/22#1",
   "date": "2026-11-06T13:44:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Objects use physics on the server and rest until something hits them. All players see the same position."
  },
  {
   "id": "engine/22#2",
   "date": "2026-11-06T13:44:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Games can add their own object models in their config, next to the built-in shapes."
  },
  {
   "id": "engine/22#3",
   "date": "2026-11-06T13:44:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "The hello example has `/cube` and `/clearcubes` to try it out."
  },
  {
   "id": "docs/53#0",
   "date": "2026-11-06T13:39:54Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "New developer docs page Objects: place, freeze and delete objects from server scripts with `CreateObject`, the five built-in models and the limits."
  },
  {
   "id": "docs/53#1",
   "date": "2026-11-06T13:39:54Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The Lua API reference covers `CreateObject`, `CreateObjectNoOffset`, `CreateVehicle`, `DeleteEntity`, `FreezeEntityPosition`, `GetHashKey`, `GetEntityModel`, `IsModelValid` and `IsModelAVehicle` (API 0.8.0)."
  },
  {
   "id": "docs/53#2",
   "date": "2026-11-06T13:39:54Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The platform status page lists objects as a preview."
  },
  {
   "id": "sdk/17#0",
   "date": "2026-11-06T13:24:21Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Server scripts can create objects with `CreateObject` and remove them with `DeleteEntity`. Built-in models: `prop_cube`, `prop_sphere`, `prop_cylinder`, `prop_cone` and `prop_plane`."
  },
  {
   "id": "sdk/17#1",
   "date": "2026-11-06T13:24:21Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`GetHashKey`, `GetEntityModel`, `IsModelValid`, `IsModelAVehicle` and `FreezeEntityPosition` for scripts."
  },
  {
   "id": "sdk/17#2",
   "date": "2026-11-06T13:24:21Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "Objects from a resource are removed when the resource stops, so restarts leave nothing behind."
  },
  {
   "id": "docs/52#0",
   "date": "2026-11-06T13:15:34Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The web interfaces docs explain how to close your page when a player holds Escape to take the mouse back."
  },
  {
   "id": "engine/21#0",
   "date": "2026-11-06T13:15:25Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "The first join after starting your PC no longer freezes the game for a few seconds while web interfaces load."
  },
  {
   "id": "engine/21#1",
   "date": "2026-11-06T13:15:25Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "`GetGameTimer()` now counts milliseconds since the game started."
  },
  {
   "id": "sdk/16#0",
   "date": "2026-11-06T13:10:03Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "Client script downloads no longer pile up forever: the game now cleans its download cache, keeping what the current server needs and removing files unused for 30 days or beyond 2 GB."
  },
  {
   "id": "sdk/16#1",
   "date": "2026-11-06T13:10:03Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "The client event `gampeon:nuiFocusReleased` tells a script when the player held Escape to take mouse and keyboard back from its web interface."
  },
  {
   "id": "docs/51#0",
   "date": "2026-11-06T13:08:35Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The web interfaces (NUI) docs now cover pages in the game, `XMLHttpRequest` callbacks and holding Escape to get the mouse back."
  },
  {
   "id": "engine/20#0",
   "date": "2026-11-06T13:05:14Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Client scripts can show web interfaces (NUI) over the game: `ui_page`, `SendNUIMessage`, `RegisterNUICallback` and `SetNuiFocus`."
  },
  {
   "id": "engine/20#1",
   "date": "2026-11-06T13:05:14Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Holding Escape for 2 seconds always gives mouse and keyboard back to the game."
  },
  {
   "id": "sdk/15#0",
   "date": "2026-11-06T12:54:50Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "Web interfaces (NUI) are ready for the game: pages get `GetParentResourceName()`, and `fetch` and `XMLHttpRequest` callbacks (including jQuery `$.post`) work the way ported pages expect."
  },
  {
   "id": "sdk/15#1",
   "date": "2026-11-06T12:54:50Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "Local database files in folders with non-English characters now open on Windows."
  },
  {
   "id": "docs/50#0",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for client scripts: how they download on join, what they can do, and how to test them without the game."
  },
  {
   "id": "docs/50#1",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for the first game world functions: player positions, heading and teleport, with the familiar native names."
  },
  {
   "id": "docs/50#2",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for the built-in text chat: messages, `/commands` with permissions, chat events and `CancelEvent`."
  },
  {
   "id": "docs/50#3",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for kicking and banning players with `ban`, `unban` and `banlist`."
  },
  {
   "id": "docs/50#4",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for web interfaces (NUI) in client scripts: `ui_page`, `SendNUIMessage`, `RegisterNUICallback` and focus."
  },
  {
   "id": "docs/50#5",
   "date": "2026-11-06T12:45:59Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The database docs now cover local database files on game servers."
  },
  {
   "id": "engine/19#0",
   "date": "2026-11-06T12:43:00Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Text chat in the game. Press T to chat with everyone on the server, `/commands` work there too."
  },
  {
   "id": "engine/19#1",
   "date": "2026-11-06T12:43:00Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Lua scripts on game servers can call web APIs with `PerformHttpRequest`. Private and local addresses stay blocked."
  },
  {
   "id": "engine/19#2",
   "date": "2026-11-06T12:43:00Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Server owners can ban players with `ban`, `unban` and `banlist`, with a duration and a reason."
  },
  {
   "id": "engine/19#3",
   "date": "2026-11-06T12:43:00Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Players see why the server disconnected them (kick or ban reason)"
  },
  {
   "id": "engine/19#4",
   "date": "2026-11-06T12:43:00Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "`MySQL.*` works on game servers with a local database file, without a separate database server."
  },
  {
   "id": "sdk/14#0",
   "date": "2026-11-06T12:34:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Client scripts can use web interfaces (NUI): `ui_page`, `SendNUIMessage`, `RegisterNUICallback` and `SetNuiFocus` (preview, the game shows them in an upcoming update)."
  },
  {
   "id": "sdk/14#1",
   "date": "2026-11-06T12:34:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`gampeon-server` can test NUI callbacks without the game with `gp_fakeplayer nui`."
  },
  {
   "id": "sdk/14#2",
   "date": "2026-11-06T12:34:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "`PerformHttpRequest` to `https://` addresses failed on Windows game servers because certificates could not be checked."
  },
  {
   "id": "sdk/14#3",
   "date": "2026-11-06T12:34:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "Console commands piped in with a byte order mark were not recognized."
  },
  {
   "id": "sdk/14#4",
   "date": "2026-11-06T12:34:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "Local database files in a folder that does not exist yet could not be opened."
  },
  {
   "id": "sdk/13#0",
   "date": "2026-11-06T12:11:50Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Server owners can ban players with `ban`, `unban` and `banlist` in the server console or in chat, with a duration and a reason. Bans are saved in `bans.json`."
  },
  {
   "id": "sdk/13#1",
   "date": "2026-11-06T12:11:50Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "`SetTimeout` and `Wait` in scripts that start with the server no longer run right away."
  },
  {
   "id": "sdk/13#2",
   "date": "2026-11-06T12:11:50Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "fixed",
   "text": "Lua files saved with a UTF-8 byte order mark (common on Windows) now load."
  },
  {
   "id": "sdk/12#0",
   "date": "2026-11-06T12:03:05Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "The HTTP client for `PerformHttpRequest` now stops open requests right away when a server shuts down."
  },
  {
   "id": "engine/18#0",
   "date": "2026-11-06T12:02:30Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Client scripts from GAMPEON test servers download automatically when you join and run in your game (preview)"
  },
  {
   "id": "engine/18#1",
   "date": "2026-11-06T12:02:30Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Server owners can restart a resource and players get the new client files right away."
  },
  {
   "id": "engine/18#2",
   "date": "2026-11-06T12:02:30Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Lua scripts in the game can read player positions and teleport players (`GetPlayerPed`, `GetEntityCoords`, `SetEntityCoords` and more)"
  },
  {
   "id": "sdk/11#0",
   "date": "2026-11-06T11:45:07Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Text chat for GAMPEON servers with the built-in `chat` resource. Scripts that use `chatMessage`, `chat:addMessage` or `chat:addSuggestion` work without changes."
  },
  {
   "id": "sdk/11#1",
   "date": "2026-11-06T11:45:07Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`CancelEvent` and `WasEventCanceled` for Lua scripts."
  },
  {
   "id": "sdk/11#2",
   "date": "2026-11-06T11:45:07Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Commands typed on the client that only the server knows now run on the server with the player's permissions."
  },
  {
   "id": "sdk/11#3",
   "date": "2026-11-06T11:45:07Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "The porting check no longer reports `GetEntityCoords` and other functions GAMPEON already has as missing."
  },
  {
   "id": "sdk/10#0",
   "date": "2026-11-06T11:25:27Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Lua scripts can read where players are: `GetPlayerPed`, `PlayerPedId`, `GetEntityCoords`, `GetEntityHeading`, `GetEntityVelocity`, `DoesEntityExist` and `GetEntityType`, with the familiar native names."
  },
  {
   "id": "sdk/10#1",
   "date": "2026-11-06T11:25:27Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Server scripts can teleport and turn players with `SetEntityCoords` and `SetEntityHeading`."
  },
  {
   "id": "sdk/10#2",
   "date": "2026-11-06T11:25:27Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`gampeon-server` has a placeholder world for testing scripts without the game (`gp_fakeplayer move` and `gp_fakeplayer where`)."
  },
  {
   "id": "sdk/9#0",
   "date": "2026-11-06T11:09:59Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Client scripts from a server download automatically when you join and run in your game (preview, only for trusted test servers for now)"
  },
  {
   "id": "sdk/9#1",
   "date": "2026-11-06T11:09:59Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "The headless test server `gampeon-server` can run client scripts with `gp_fakeplayer client`, so resources can be tested end to end without the game."
  },
  {
   "id": "sdk/9#2",
   "date": "2026-11-06T11:09:59Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Lua functions `PlayerId` and `GetPlayerServerId` for client scripts."
  },
  {
   "id": "docs/49#0",
   "date": "2026-11-06T10:55:12Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for players, identifiers and the join check in Lua resources."
  },
  {
   "id": "docs/49#1",
   "date": "2026-11-06T10:55:12Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Guide for testing Lua resources without the game using the headless `gampeon-server`."
  },
  {
   "id": "docs/49#2",
   "date": "2026-11-06T10:55:12Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "Server registration docs now explain how to connect a GAMPEON game server to the server list."
  },
  {
   "id": "engine/16#0",
   "date": "2026-11-06T10:54:56Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Game servers run Lua resources with `server.cfg`, console commands, ACE permissions and network events between server scripts and players."
  },
  {
   "id": "engine/16#1",
   "date": "2026-11-06T10:54:56Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Players only spawn after the server has checked their launcher join ticket, and get their GAMPEON display name in game."
  },
  {
   "id": "sdk/8#0",
   "date": "2026-11-06T10:41:42Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Game servers check the player's launcher join ticket with GAMPEON before scripts see the player, and players get `gampeon:` and `license:` identifiers from their account."
  },
  {
   "id": "sdk/8#1",
   "date": "2026-11-06T10:41:42Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Registered servers send a heartbeat so they show up in the launcher's server list, with `tags` and `locale` from `server.cfg`."
  },
  {
   "id": "sdk/8#2",
   "date": "2026-11-06T10:41:42Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "Scripts can no longer read or change the server's GAMPEON connection settings."
  },
  {
   "id": "sdk/7#0",
   "date": "2026-11-06T10:19:10Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`gampeon-server` runs server resources without the game, with a console, database, HTTP and fake players for testing scripts."
  },
  {
   "id": "sdk/7#1",
   "date": "2026-11-06T10:19:10Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`server.cfg` and console commands (`ensure`, `exec`, `set`/`setr`/`sets`, `add_ace`, `add_principal`, `status`, `resmon` …) with ACE permissions."
  },
  {
   "id": "sdk/7#2",
   "date": "2026-11-06T10:19:10Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Player functions for scripts: `GetPlayers`, `GetPlayerName`, `GetPlayerIdentifiers`, `GetPlayerIdentifierByType`, `GetPlayerPing`, `DropPlayer` and more, with `gampeon:` and `license:` identifiers."
  },
  {
   "id": "sdk/7#3",
   "date": "2026-11-06T10:19:10Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "`playerJoining` and `playerDropped` events."
  },
  {
   "id": "sdk/7#4",
   "date": "2026-11-06T10:19:10Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "Network events from players are size- and rate-limited before scripts see them."
  },
  {
   "id": "docs/48#0",
   "date": "2026-11-06T10:14:04Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs for commands and convars, the oxmysql-compatible database (`MySQL.*`) and HTTP requests in Lua."
  },
  {
   "id": "docs/48#1",
   "date": "2026-11-06T10:14:04Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "improved",
   "text": "The Lua API reference covers commands, convars, HTTP, vectors, promises and the database."
  },
  {
   "id": "sdk/6#0",
   "date": "2026-11-06T09:54:06Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Server scripts can use `MySQL.*` like oxmysql (query, single, scalar, insert, update, prepare, transaction, `.await`, plus `MySQL.Async`/`MySQL.Sync`) with MariaDB, MySQL or a local database file."
  },
  {
   "id": "sdk/6#1",
   "date": "2026-11-06T09:54:06Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Built-in `oxmysql` and `mysql-async` stand-ins, so existing resources that depend on them start without manifest changes."
  },
  {
   "id": "sdk/6#2",
   "date": "2026-11-06T09:54:06Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "improved",
   "text": "The porting check now recognizes commands, convars, HTTP requests and resource files as supported, and flags `exports.oxmysql` calls."
  },
  {
   "id": "sdk/5#0",
   "date": "2026-11-06T09:39:25Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Lua scripts can register console and chat commands with permissions (RegisterCommand, ExecuteCommand, IsPlayerAceAllowed)."
  },
  {
   "id": "sdk/5#1",
   "date": "2026-11-06T09:39:25Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Server scripts can read and set convars from server.cfg and send web requests with PerformHttpRequest; private network addresses are blocked."
  },
  {
   "id": "sdk/5#2",
   "date": "2026-11-06T09:39:25Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "vector2, vector3 and vector4 values, promises and `Citizen.Await` for scripts."
  },
  {
   "id": "sdk/5#3",
   "date": "2026-11-06T09:39:25Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "LoadResourceFile, SaveResourceFile, GetResourceMetadata and GetInvokingResource for scripts."
  },
  {
   "id": "discord-bot/4#0",
   "date": "2026-11-06T09:02:49Z",
   "area": "community",
   "area_label": "Community",
   "type": "new",
   "text": "The GAMPEON Discord posts a daily update of everything that shipped, new dev blog posts and an up-to-date overview of what works today."
  },
  {
   "id": "engine/14#0",
   "date": "2026-11-06T09:01:20Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Game servers now choose their tick rate based on player count and load (up to 120 Hz on smaller servers) and step down smoothly instead of stuttering when busy."
  },
  {
   "id": "docs/42#0",
   "date": "2026-11-06T08:53:32Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs have a \"Known issues and limits\" page and a \"Report a problem\" page that explains where to send bugs, security problems and ideas."
  },
  {
   "id": "docs/42#1",
   "date": "2026-11-06T08:53:32Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Every docs page has a \"Report a problem with this page\" link and a link to the GAMPEON Discord."
  },
  {
   "id": "docs/40#0",
   "date": "2026-11-06T08:18:01Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "The developer docs have a page that sums up the terms and legal texts for creators and links to the full versions."
  },
  {
   "id": "platform/42#0",
   "date": "2026-11-06T08:17:26Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "The API tells clients which version of the terms is in force and lets accounts accept it."
  },
  {
   "id": "web/64#0",
   "date": "2026-11-06T08:16:59Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "The Terms of Use, Community Guidelines, Privacy Policy and Legal Notice are now on gampeon.com/legal, in English and German."
  },
  {
   "id": "web/64#1",
   "date": "2026-11-06T08:16:59Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Sign-up asks you to accept the Terms of Use and Community Guidelines. Existing accounts see a short notice to accept them."
  },
  {
   "id": "web/63#0",
   "date": "2026-11-06T08:03:04Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Cleaner web addresses: gampeon.com/games instead of gampeon.com/#/games. Old links and bookmarks still work."
  },
  {
   "id": "web/63#1",
   "date": "2026-11-06T08:03:04Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The back button returns you to where you were on the previous page."
  },
  {
   "id": "web/62#0",
   "date": "2026-11-06T07:44:04Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "A new gampeon.com start page for visitors: pick a world, see one place in four art styles and find out how playing, building and sharing work."
  },
  {
   "id": "platform/40#0",
   "date": "2026-11-06T07:31:55Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Logging in with Steam or Discord and the links in our emails now take you straight to gampeon.com."
  },
  {
   "id": "web/61#0",
   "date": "2026-11-06T07:27:58Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Sign in to the GAMPEON launcher through gampeon.com, with your email or a connected account."
  },
  {
   "id": "web/61#1",
   "date": "2026-11-06T07:27:58Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Community invite links open a preview on gampeon.com and take you straight into the launcher."
  },
  {
   "id": "platform/38#0",
   "date": "2026-11-06T07:21:57Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Sign in to the GAMPEON launcher with your browser, including Steam and Discord."
  },
  {
   "id": "platform/38#1",
   "date": "2026-11-06T07:21:57Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Game servers can check who is joining from the launcher without ever seeing a password."
  },
  {
   "id": "web/60#0",
   "date": "2026-11-06T07:10:36Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "gampeon.com has a new start page that explains GAMPEON, with sign-up, the latest dev blog post, recent changes and answers to common questions."
  },
  {
   "id": "web/60#1",
   "date": "2026-11-06T07:10:36Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The portal now lives directly at gampeon.com, and old portal links keep working. During the closed beta, games, profiles, the marketplace and the community are for signed-in members."
  },
  {
   "id": "docs/35#0",
   "date": "2026-11-06T06:50:58Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer docs list communities for studios and projects (preview) and the desktop launcher (planned) on the status page, with the new API reference."
  },
  {
   "id": "platform/35#0",
   "date": "2026-11-06T06:50:16Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Studios and projects can turn on their own community with channels, categories, roles and permissions, invite links and moderation tools (API preview for the upcoming launcher)."
  },
  {
   "id": "platform/35#1",
   "date": "2026-11-06T06:50:16Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Your favorite games are available as a library for the upcoming launcher."
  },
  {
   "id": "web/56#0",
   "date": "2026-11-06T06:38:32Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "A status page in the portal shows whether the website, portal, web API, developer docs and AI tools are up, with 90 days of history and live game server numbers."
  },
  {
   "id": "web/56#1",
   "date": "2026-11-06T06:38:32Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "The dev blog, changelog and developer docs can be read and searched inside the portal."
  },
  {
   "id": "web/56#2",
   "date": "2026-11-06T06:38:32Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The portal search also finds developer docs, blog posts and changelog entries."
  },
  {
   "id": "docs/37#0",
   "date": "2026-11-06T06:38:22Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "The docs explain how websites can search the developer docs with plain JSON."
  },
  {
   "id": "docs/37#1",
   "date": "2026-11-06T06:38:22Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "The API reference lists the public status endpoint."
  },
  {
   "id": "platform/37#0",
   "date": "2026-11-06T06:37:11Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "The platform checks its website, portal, web API, developer docs and MCP server every minute and keeps 90 days of history for the new status page."
  },
  {
   "id": "platform/37#1",
   "date": "2026-11-06T06:37:11Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "The developer docs can be searched from the portal."
  },
  {
   "id": "web/54#0",
   "date": "2026-11-06T06:09:10Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The Like button is blue now."
  },
  {
   "id": "web/54#1",
   "date": "2026-11-06T06:09:10Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Add GIFs to posts and comments, with search powered by KLIPY."
  },
  {
   "id": "platform/36#0",
   "date": "2026-11-06T06:09:06Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "GIFs in posts and comments, with search powered by KLIPY. Accounts under 16 get a stricter filter."
  },
  {
   "id": "platform/33#0",
   "date": "2026-11-06T05:18:09Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Comments and replies on posts, with reactions, editing and reporting."
  },
  {
   "id": "platform/33#1",
   "date": "2026-11-06T05:18:09Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Six reactions on posts and comments instead of a single like."
  },
  {
   "id": "platform/33#2",
   "date": "2026-11-06T05:18:09Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Up to four photos per post, link previews with the page title, and sharing of public posts."
  },
  {
   "id": "platform/33#3",
   "date": "2026-11-06T05:18:09Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Choose who sees a post (public, friends, only me) and who can comment."
  },
  {
   "id": "platform/33#4",
   "date": "2026-11-06T05:18:09Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Edit and pin posts, and mention people with @handle."
  },
  {
   "id": "engine/13#0",
   "date": "2026-11-06T05:12:23Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Servers only send physics props within 80 m of a player, update distant players less often and use push-based replication, which saves server time on every frame."
  },
  {
   "id": "engine/13#1",
   "date": "2026-11-06T05:12:23Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "In a test with 56 bots, server time per frame dropped by 28% compared to the previous build."
  },
  {
   "id": "web/44#0",
   "date": "2026-11-06T04:04:29Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Jobs in the portal: post open roles for your game, studio or project, apply with a short message and talk with the team in a private conversation."
  },
  {
   "id": "web/44#1",
   "date": "2026-11-06T04:04:29Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Studio and project pages show their open roles, and the team can post a new job from there."
  },
  {
   "id": "platform/28#0",
   "date": "2026-11-06T03:46:46Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Jobs: studios and projects can post open roles, people can apply and talk about each application, with reporting and appeals built in."
  },
  {
   "id": "platform/26#0",
   "date": "2026-11-06T03:36:50Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Opening the MCP server address in a browser now takes you to the guide for connecting your AI assistant."
  },
  {
   "id": "docs/23#0",
   "date": "2026-11-06T03:02:49Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "The GAMPEON MCP server is online in preview, so AI assistants can connect to GAMPEON. The developer docs explain how to set it up."
  },
  {
   "id": "web/37#0",
   "date": "2026-11-06T02:35:57Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Log in with Steam or Discord, and connect both to your account under Connected accounts."
  },
  {
   "id": "platform/23#0",
   "date": "2026-11-06T02:35:45Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Log in with Steam or Discord, and connect both to your account under Connected accounts."
  },
  {
   "id": "docs/14#0",
   "date": "2026-11-06T02:24:27Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Developer documentation for GAMPEON with guides for building with AI assistants, Lua scripting, the web API and the marketplace."
  },
  {
   "id": "docs/14#1",
   "date": "2026-11-06T02:24:27Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Complete Lua API and web API references generated from the platform itself, plus llms.txt files for AI assistants."
  },
  {
   "id": "platform/22#0",
   "date": "2026-11-06T02:22:32Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "GAMPEON MCP server, so AI assistants like Claude or ChatGPT can read the docs, write and check Lua resources, and set up your projects and marketplace entries for you."
  },
  {
   "id": "platform/22#1",
   "date": "2026-11-06T02:22:32Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Resource templates (events, game mode, shop, job) and an automatic check that finds functions that don't exist in GAMPEON."
  },
  {
   "id": "engine/11#0",
   "date": "2026-11-06T02:20:32Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "Servers protect their tick rate: when a server gets close to its time budget per frame, it turns new players away with a “Server busy, please try again shortly” message, and everyone already playing stays in."
  },
  {
   "id": "web/32#0",
   "date": "2026-11-06T02:16:48Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Access tokens page in the portal to connect AI assistants like Claude or ChatGPT to your account with limited permissions."
  },
  {
   "id": "web/32#1",
   "date": "2026-11-06T02:16:48Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "AI activity page that lists everything your access tokens did, including refused attempts."
  },
  {
   "id": "platform/21#0",
   "date": "2026-11-06T02:05:06Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Sign-up asks for your month and year of birth. The minimum age is 13."
  },
  {
   "id": "platform/21#1",
   "date": "2026-11-06T02:05:06Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Safer default settings for players under 16: only friends of friends can send friend requests, and friend lists stay private."
  },
  {
   "id": "web/34#0",
   "date": "2026-11-06T02:04:09Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Sign-up asks for your month and year of birth. The minimum age is 13."
  },
  {
   "id": "web/34#1",
   "date": "2026-11-06T02:04:09Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Safer default settings for players under 16."
  },
  {
   "id": "platform/20#0",
   "date": "2026-11-06T01:58:25Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Personal access tokens with scopes, so AI assistants and tools can work on your projects without your password."
  },
  {
   "id": "platform/20#1",
   "date": "2026-11-06T01:58:25Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "An activity log that shows everything your access tokens did in the last 90 days."
  },
  {
   "id": "web/30#0",
   "date": "2026-11-06T01:46:18Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Feed with posts and releases from the creators, studios and games you follow."
  },
  {
   "id": "web/30#1",
   "date": "2026-11-06T01:46:18Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Friends list with friend requests, blocking and privacy settings."
  },
  {
   "id": "web/30#2",
   "date": "2026-11-06T01:46:18Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Follow buttons and follower counts on profiles, studios and game pages."
  },
  {
   "id": "web/30#3",
   "date": "2026-11-06T01:46:18Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Report a post and appeal if one of your posts was removed."
  },
  {
   "id": "platform/16#0",
   "date": "2026-11-06T01:46:15Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Follow creators, studios and games and see their posts and releases in your feed."
  },
  {
   "id": "platform/16#1",
   "date": "2026-11-06T01:46:15Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Friends with friend requests, blocking and privacy settings for who can contact you and see your lists."
  },
  {
   "id": "platform/16#2",
   "date": "2026-11-06T01:46:15Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Text posts for creators, studios and games, with likes."
  },
  {
   "id": "platform/16#3",
   "date": "2026-11-06T01:46:15Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Report a post, and appeal if one of your posts was removed."
  },
  {
   "id": "sdk/3#0",
   "date": "2026-11-06T01:41:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "The Lua scripting API is now described in a machine-readable file, the source for the upcoming Lua reference and AI tools."
  },
  {
   "id": "sdk/3#1",
   "date": "2026-11-06T01:41:28Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Type definitions for VS Code, Cursor and other editors give autocomplete and hover help for every GAMPEON Lua function."
  },
  {
   "id": "web/27#0",
   "date": "2026-11-06T01:33:37Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Changelog on gampeon.com that updates itself several times a day, with an Atom feed and JSON."
  },
  {
   "id": "web/27#1",
   "date": "2026-11-06T01:33:37Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Dev blog section on gampeon.com."
  },
  {
   "id": "docs/12#0",
   "date": "2026-11-06T01:30:53Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Design for achievements, studios and projects."
  },
  {
   "id": "web/26#0",
   "date": "2026-11-06T01:30:40Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "150 achievements to unlock in the portal, shown on profiles, plus pages for studios and projects."
  },
  {
   "id": "platform/18#0",
   "date": "2026-11-06T01:30:28Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Achievement notifications that arrive within 30 minutes are grouped into one."
  },
  {
   "id": "platform/15#0",
   "date": "2026-11-06T01:28:22Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "The platform API now describes every route in an OpenAPI 3.1 document."
  },
  {
   "id": "docs/10#0",
   "date": "2026-11-06T01:19:53Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Design for the upcoming developer documentation and for Creator tools that connect AI assistants to GAMPEON."
  },
  {
   "id": "platform/14#0",
   "date": "2026-11-06T01:10:42Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Achievements, studios and projects in the platform API."
  },
  {
   "id": "web/25#0",
   "date": "2026-11-06T00:59:00Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Background video in the portal home banner, with a pause button and a still image on mobile."
  },
  {
   "id": "engine/10#0",
   "date": "2026-11-06T00:41:01Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Engine patch raises the network connection limit from 128 to 512, lifting the old ceiling of 127 players per server."
  },
  {
   "id": "web/24#0",
   "date": "2026-11-06T00:25:43Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Collection banners got scene backgrounds, bigger characters and logo titles."
  },
  {
   "id": "loadtest/6#0",
   "date": "2026-11-06T00:17:31Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "new",
   "text": "Bot launcher for Windows test machines that works without Python."
  },
  {
   "id": "web/22#0",
   "date": "2026-11-06T00:17:11Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "New 'Dream. Build. Play.' headline on the portal home page."
  },
  {
   "id": "web/23#0",
   "date": "2026-11-06T00:16:23Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Portal collections are shown as coloured banners with characters stepping out of the frame."
  },
  {
   "id": "docs/7#0",
   "date": "2026-11-06T00:09:43Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Draft design for running one world across more than one server."
  },
  {
   "id": "engine/9#0",
   "date": "2026-11-06T00:08:35Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "A server no longer crashes when more players connect than the network layer can hold. Extra players get a clear 'server full' message."
  },
  {
   "id": "platform/13#0",
   "date": "2026-11-05T23:50:34Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Platform emails and messages are now in English."
  },
  {
   "id": "web/21#0",
   "date": "2026-11-05T23:50:10Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The website and portal are now in English first."
  },
  {
   "id": "web/20#0",
   "date": "2026-11-05T23:37:53Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Portal rebuilt around a top menu with genre and category menus, a home page made of content rows and filterable lists."
  },
  {
   "id": "platform/12#0",
   "date": "2026-11-05T23:37:41Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Marketplace search returns counts per category and tag, and can sort by downloads or by newest."
  },
  {
   "id": "platform/11#0",
   "date": "2026-11-05T23:14:06Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "fixed",
   "text": "Rejected uploads now always return a readable error message instead of a dropped connection."
  },
  {
   "id": "web/19#0",
   "date": "2026-11-05T23:00:44Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Dashboard and profile pages show downloads, storage and recent activity."
  },
  {
   "id": "platform/10#0",
   "date": "2026-11-05T23:00:16Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "fixed",
   "text": "Connections are closed cleanly when an upload is rejected."
  },
  {
   "id": "platform/9#0",
   "date": "2026-11-05T22:57:45Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Your dashboard data now includes storage used, file status and download counts."
  },
  {
   "id": "web/18#0",
   "date": "2026-11-05T22:56:30Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Upload and download files in the portal, with your own preview images."
  },
  {
   "id": "platform/8#0",
   "date": "2026-11-05T22:53:04Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Marketplace files: the platform stores uploads and their preview images and serves downloads."
  },
  {
   "id": "web/17#0",
   "date": "2026-11-05T22:46:56Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Appeals in the portal: a tab in the moderation panel and the appeal status on your own dashboard."
  },
  {
   "id": "web/16#0",
   "date": "2026-11-05T22:43:31Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Original key art for the portal's home banner, genres and marketplace categories."
  },
  {
   "id": "platform/7#0",
   "date": "2026-11-05T22:43:22Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Appeals: creators can contest a moderation decision, and moderators can uphold or reverse it with a reason."
  },
  {
   "id": "web/15#0",
   "date": "2026-11-05T22:40:27Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Notification bell and account menu as dropdowns, sign-in on mobile and a compact sidebar."
  },
  {
   "id": "web/14#0",
   "date": "2026-11-05T22:30:07Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "New dashboard layout for the portal."
  },
  {
   "id": "web/13#0",
   "date": "2026-11-05T22:00:17Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "fixed",
   "text": "After an update the portal no longer runs outdated code from the browser cache."
  },
  {
   "id": "web/12#0",
   "date": "2026-11-05T21:58:42Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Portal pages to verify your email address and reset your password."
  },
  {
   "id": "platform/6#0",
   "date": "2026-11-05T21:58:38Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Email verification and password reset."
  },
  {
   "id": "engine/8#0",
   "date": "2026-11-05T21:49:06Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Staggered relevance filter for props: each connection is checked every few frames, cutting filter time from 3.5 ms to 0.9 ms."
  },
  {
   "id": "web/11#0",
   "date": "2026-11-05T21:38:45Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Published a security.txt, so security researchers know how to reach us."
  },
  {
   "id": "platform/5#0",
   "date": "2026-11-05T21:29:42Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "fixed",
   "text": "The API now answers HEAD requests correctly."
  },
  {
   "id": "web/9#0",
   "date": "2026-11-05T21:29:00Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The portal preview now runs against the live platform API instead of sample data."
  },
  {
   "id": "web/8#0",
   "date": "2026-11-05T21:25:31Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Stricter security settings for the web portal."
  },
  {
   "id": "platform/4#0",
   "date": "2026-11-05T21:25:21Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Hardened the platform API against abuse with request limits and stricter input handling."
  },
  {
   "id": "loadtest/5#0",
   "date": "2026-11-05T21:20:30Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "fixed",
   "text": "Test servers on Windows are no longer slowed down by power saving, which had capped the tick rate at 22 Hz."
  },
  {
   "id": "engine/7#0",
   "date": "2026-11-05T21:20:10Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "Props at rest go dormant and stop replicating, which saves about 3.5 ms of server time per frame with 5,000 props."
  },
  {
   "id": "web/7#0",
   "date": "2026-11-05T21:15:54Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "The portal now covers every genre, not just roleplay."
  },
  {
   "id": "web/6#0",
   "date": "2026-11-05T21:05:49Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "improved",
   "text": "Portal redesign with a darker gaming look in the GAMPEON colours."
  },
  {
   "id": "platform/3#0",
   "date": "2026-11-05T20:56:26Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "improved",
   "text": "Sign-up is invite-only while the platform is in preview."
  },
  {
   "id": "web/4#0",
   "date": "2026-11-05T20:53:09Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "First preview of the web portal: games and servers, marketplace, profiles, uploads and content reporting."
  },
  {
   "id": "platform/2#0",
   "date": "2026-11-05T20:53:06Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "Platform API for the web portal: profiles, marketplace search and server details."
  },
  {
   "id": "engine/6#0",
   "date": "2026-11-05T19:59:24Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "A server now accepts up to 300 players instead of the engine default of 16."
  },
  {
   "id": "loadtest/4#0",
   "date": "2026-11-05T18:58:54Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "fixed",
   "text": "Fixed the packaging script and capped the bot frame rate, so test machines can run more bots."
  },
  {
   "id": "docs/6#0",
   "date": "2026-11-05T18:39:44Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Brand guide with our colours and logo rules."
  },
  {
   "id": "web/3#0",
   "date": "2026-11-05T18:39:00Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "Branded homepage with the GAMPEON logo, icon and colours."
  },
  {
   "id": "web/1#0",
   "date": "2026-11-05T18:32:45Z",
   "area": "web",
   "area_label": "Website & portal",
   "type": "new",
   "text": "gampeon.com is online."
  },
  {
   "id": "engine/5#0",
   "date": "2026-11-05T18:16:06Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "Characters can no longer launch props with unrealistic force by walking into them."
  },
  {
   "id": "engine/4#0",
   "date": "2026-11-05T18:09:18Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "fixed",
   "text": "Fast-moving props no longer tunnel through the ground, thanks to continuous collision detection."
  },
  {
   "id": "engine/3#0",
   "date": "2026-11-05T18:01:52Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "The test map has boundary walls, and server metrics now show CPU load per core."
  },
  {
   "id": "sdk/2#0",
   "date": "2026-11-05T17:31:17Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Porting check: scans existing Lua resources and lists what has to change before they run on GAMPEON."
  },
  {
   "id": "platform/1#0",
   "date": "2026-11-05T17:29:31Z",
   "area": "platform",
   "area_label": "Platform",
   "type": "new",
   "text": "First version of the platform API: accounts, a server browser and a content registry with reporting."
  },
  {
   "id": "sdk/1#0",
   "date": "2026-11-05T17:26:47Z",
   "area": "sdk",
   "area_label": "SDK & scripting",
   "type": "new",
   "text": "Lua 5.4 scripting runtime with a sandbox and a resource system driven by manifest files."
  },
  {
   "id": "docs/4#0",
   "date": "2026-11-05T17:14:37Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Designed the scripting runtime (sandboxed Lua 5.4 with resources) and the backend for accounts, servers and content."
  },
  {
   "id": "loadtest/3#0",
   "date": "2026-11-05T17:13:39Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "new",
   "text": "Packaging script that builds the dedicated server and a lightweight bot client in one go."
  },
  {
   "id": "engine/2#0",
   "date": "2026-11-05T04:41:03Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "improved",
   "text": "The server measures its own frame time and logs slow frames, so spikes can be traced."
  },
  {
   "id": "loadtest/2#0",
   "date": "2026-11-05T04:28:31Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "improved",
   "text": "Load-test reports now include server load, plus a new scenario with 40 local bots."
  },
  {
   "id": "engine/1#0",
   "date": "2026-11-05T04:26:41Z",
   "area": "engine",
   "area_label": "Engine",
   "type": "new",
   "text": "First engine prototype: a dedicated server with physics-simulated props, headless bots and server metrics written every second."
  },
  {
   "id": "discord-bot/1#0",
   "date": "2026-11-05T02:18:37Z",
   "area": "community",
   "area_label": "Community",
   "type": "new",
   "text": "The community Discord got a new channel structure and onboarding, set up by script so it can be rebuilt any time."
  },
  {
   "id": "docs/2#0",
   "date": "2026-11-05T02:17:29Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Measurement plan for the first technical milestone: tick rate, bandwidth per client, CPU load and desync under load."
  },
  {
   "id": "loadtest/1#0",
   "date": "2026-11-05T02:17:25Z",
   "area": "testing",
   "area_label": "Testing",
   "type": "new",
   "text": "Load-test toolkit with a headless bot launcher, metrics analysis and ready-made test scenarios."
  },
  {
   "id": "docs/1#0",
   "date": "2026-11-05T02:17:24Z",
   "area": "docs",
   "area_label": "Docs",
   "type": "new",
   "text": "Recorded the first architecture decisions: Unreal Engine 5.8, Iris replication, server-owned sleeping props and Studio as an editor plugin."
  }
 ]
}
