Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 17:22
· 5 commits to main since this release

0.8.0 (2026-10-25)

Bug Fixes

  • agents: the script inbox is no longer dropped with the stack frame (43b66f2)
  • assets: a material's textures load with it (21805ef)
  • control: gameplay time no longer follows the physics strategy (86ee883)
  • correctness pass — ECS undefined behavior, Ergon silent wrongs, script persistence holes (f01ec86)
  • data: a marker component belongs in the scene that declared it (84a6046)
  • data: a placed entity always has a world pose (5ffa39a)
  • ecs: compaction repoints by row, not by identity (e7b38a7)
  • ecs: component-less queries and cross-domain Without/Option terms (34f938f)
  • ecs: cross-domain queries skip orphan rows and dead entities (67eb616)
  • ecs: make the field-SoA component path work end to end (6a052b4)
  • ecs: removing a row next to a dead orphan no longer panics (2a1102f)
  • editor: the engine loads the meshes and materials the editor's entities name (a67b8f7)
  • graphics: flag sets cross into wgpu by declaration, not by hand (3cdd94f), closes #279
  • hub: modals centred and dimming the whole window, card actions reachable, a missing editor named (58f5f79)
  • io: an asset's identity has one definition, not five (eb00f8b)
  • lane: lanes borrow through LaneContext, soundly (31e1855)
  • lanes: a deferred turn no longer loses what it was never told (4232535)
  • layout: the mesh module and the lanes' test helpers follow the file conventions (95be658)
  • macros: a tuple component with a skipped field derives (4ce453f)
  • math: a sheared transform keeps where it points; affine inverse undoes rotations (ade3806)
  • math: a tiny or squashed transform keeps its rotation (b59a154)
  • physics: a dynamic body keeps the velocity gravity gave it (12e1234)
  • physics: colliders honour their authored fields and the body's scale (69c0a13)
  • physics: stacked rigid bodies stand still instead of exploding or freezing (ece53d1)
  • render: a mirrored entity is drawn outside out (67e29cf)
  • render: the sky no longer repaints the glass (5752c52)
  • scene: what reading a game save adapts reaches the load report — once, and only for what loads (5ff4649)
  • scripting: hot reload and mount agree on one script folder (964e547)
  • scripting: null survives a save, text survives a stop, a state calls its own methods (aa20b01)
  • script: the docs of deleted methods stayed behind (b7d6f74)
  • script: the scripting chain runs outside khora-runtime (01ac950)
  • ui: controls revealed while a row is pointed at no longer vanish as the pointer reaches them (ecb2692)
  • ui: UI text reaches the screen and follows the colour target (7237d05)

Features

  • agent: sweep cargo's target/ at the start of each agent session (ce72e9c)
  • assets: a glTF's scenes, meshes, materials and textures are assets of their own (3b224c9)
  • assets: hot reload refreshes assets already on screen (ca9f0a9)
  • control: pausing is a clock, not a mode (8b2c2a4)
  • core: an agent declares what it contends with the others for (93f067e)
  • core: one channel structure, instantiated per event type (fce8416)
  • data: a component publishes its shape (f7ed1aa)
  • data: the simulation writes where it put a body, not where its author did (4e94157)
  • ecs: column writes — one command writes many rows of a component in a page-grouped pass; conflicts per field (8417671)
  • ecs: component keys — declared components in CRPECS pages, one vtable per component (7a0161f)
  • ecs: typed component access — script writes without JSON, column snapshots (445032d)
  • editor: components a script declares in the inspector — typed cards, the add menu, prefab overrides (76c713a)
  • editor: dropping a glTF places its scene, node by node with its materials (2743364)
  • editor: New Script avoids names other scripts already declare (d3d74a1)
  • editor: New Script in the Assets panel (71d26f6)
  • editor: prefab overrides in the inspector — see, revert, apply (42682f8)
  • editor: the inspector shows a declared field's [Header], [Tooltip] and [Range] (b9a8604)
  • editor: the inspector's asset slot (1b8ec1a)
  • editor: where a script problem is, and a Problems tab — compile, registration and running problems, located (92d2938)
  • ergon: a conformance suite, and every script body resumes where it stopped (54fd0ad)
  • hub: a new project starts with gameplay that runs (2483c38)
  • input: the raw stream survives, and losing focus lets go (8774729)
  • persistence: a schema-bound snapshot — FastestLoad loads 9x faster (c6f6614)
  • persistence: authored scenes, observed saves — a game save is a three-way merge (6b67cec)
  • persistence: prefab instances stay linked — a prefab edit reaches every instance (e29a0fd)
  • persistence: records — what a save holds, by name (4df3d77)
  • persistence: scene records end to end — pages, identity, atomic load (9d8fbf2)
  • physics: a body reports the velocity it has, not the one it was given (9f5412d)
  • physics: a contact can name the entities that made it (b4bc286)
  • physics: collisions become events on a channel, not a component (3d4f27f)
  • physics: moving something is declared, not inferred from a difference (7630a01)
  • render: a glTF material's specular strength and colour shade it (ff5e125)
  • render: one mesh vertex; a glTF's default scene decodes as one mesh (f77f847)
  • render: the camera follows its target, and bad camera or light data never breaks a frame (b6e3fab)
  • script: #[ergon_fn] — exposing an engine function by annotating it (2306b6c)
  • script: a collision finally reaches a behavior (05ca4f3)
  • script: a saved scene loads the state it saved (56a65de)
  • script: a script can ask what the player is holding (1b89f78)
  • script: a script can name the engine's components (0a76ee0)
  • script: an engine type is declared, and read with v.x (d01be03)
  • script: Ergon bytecode compiler, and a VM that can call (98218ff)
  • script: Ergon diagnostics and lexer (6e476d3)
  • script: Ergon ECS bridge — world commands, script component and flow (4ba047e)
  • script: Ergon frame arena and persistent store (491ba01)
  • script: Ergon module resolution (df67762)
  • script: Ergon syntax tree and parser (3e28847)
  • script: Ergon type checker (95e4c7e)
  • script: event dispatch — declared is subscribed, and nothing detaches (390056f)
  • script: every and after — declarative time, without a clock (d06aaa4)
  • script: hot-reload that carries an instance's state across an edit (799dfe1)
  • scripting: FixedUpdate runs once per fixed step — a fixed clock in the turn (774d687)
  • scripting: Spawn(prefab, …, at:, facing:) and e.SetMaterial(m) (d35f392)
  • scripting: Spawn returns its entity; a faulted turn applies nothing (da0d664)
  • scripting: a collision tells every entity running a behavior — by its component, through World::behavior_components (91194a1)
  • scripting: a frame's fuel shared among behaviors — equal shares, rotating remainder, debt for overdraft, a cursor per behavior (4e7092f)
  • scripting: a game attaches a behavior by its component — declarations registered before setup, GameWorld::add_declared_component (952669f)
  • scripting: a recorded lifecycle, OnLoad — and scripts run only while the game does (24eb30b)
  • scripting: a suspended body survives an edit of its script — resume in tiers (42434eb)
  • scripting: a watchdog for bodies that never finish, and the docs of systems and queries (1191cfa)
  • scripting: asset references — Prefab?, Sound?, Material?, Mesh?, Texture?, Scene? (c38a9d2)
  • scripting: behaviors are components — each declares its authored component and its runtime state companion, persisted by provenance (4be62f7)
  • scripting: behaviors attached by their component run — rows in, changed fields and state written back a column at a time (2406d33)
  • scripting: Ergon component reads — e.Get(C), e.Has(C), a working set per frame (c697274)
  • scripting: Ergon component writes — e.Set, e.Add, e.Remove, Spawn, entity methods (29539dd)
  • scripting: Ergon control flow, and the rest of runtime correctness (db77e8c)
  • scripting: Ergon script-defined components — declared in scripts, registered at the frame boundary, saved by their own declaration (1f21002)
  • scripting: Ergon values — arrays, structs, ?., foreach, Push/RemoveAt (e43bc8f)
  • scripting: events delivered by table — a payload that does not fit is dropped and reported (6426668)
  • scripting: inspector attributes on fields — [Range], [Tooltip], [Header] checked and carried (46f64d9)
  • scripting: named arguments and parameter defaults (fa7a485)
  • scripting: scheduling attributes checked and stored — [Critical], [Budget(0.2ms)], [Rate(10hz)] (46989c7)
  • scripting: string interpolation — $"hp: {h.current} / {h.max}" (9495cd7), closes Entity#12
  • scripting: systems and queries in the language — system items, foreach (…) with … without … (df1a7c1)
  • scripting: systems run — one entity per system, one run order, ref rows written back (5d60be4)
  • scripting: the script lane schedules by [Critical], [Budget] and [Rate] — and no frame's time is lost (b16d505)
  • script: live behavior state reaches the scene, for the instances that moved (963f75f)
  • script: prove Ergon's interruptible VM before designing its syntax (9e8043c)
  • script: states and become — a state's data exists only while it is in it (1ff0bd0)
  • script: strings — literals in the program, computed text in the arena (746569d)
  • script: the .erg decoder and the import graph hot-reload walks (46c4223)
  • script: the hot-reload pump, and the channel it had to cross (b7452e1)
  • script: the scripting agent and its budgeted lane (e36bfa7)
  • tools: the Khora sign, a light hub, brand fonts and loading films (d85f520)
  • xtask: a one-time upgrade of a project's scenes, prefabs and saves from Script to behavior components (b785945)
  • xtask: upgrade-scenes — rewrite a project's v1 scenes once (f39cd84)