Skip to content

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 22:47
1027b23

0.18.0 (2026-08-24)

⚠ BREAKING CHANGES

  • engine: cross-process texture import for Python processors (#1899)
  • engine: graphics and ray-tracing kernels at Python parity (#1896)
  • python: batched kernel dispatch — one submission, one fence (#1889)
  • engine: GLSL is the kernel source contract — vendored compiler, keyed cache (#1885)
  • engine: CpuReadbackBridge, set_cpu_readback_bridge and its FullAccess mirror are deleted; open_cpu_readback_staging is added to the escalate wire.
  • plan: run_cpu_readback_copy(buffer_to_image) now refuses a staging that has never been filled from its surface.
  • engine: run_compute_kernel and register_compute_kernel change shape.
  • engine: Texture::native_handle() returns a DMA-BUF fd whose ownership transfers to the caller; previously the texture closed it at drop. No in-tree caller exists.
  • engine: a pool surface id names the frame — recycled ids fail loudly, never serve another frame's pixels (#1877)
  • engine: subscribe() returns Result and registers its subscriber before returning, so no event is lost to the establishment window (#1875)
  • python: delete the wheel duplicate media_clock_now_ns export (#1860)
  • engine: audio tick timestamps carry the machine epoch (#1859)
  • engine: MediaClock carries the machine monotonic epoch (#1858)
  • retire the manifest, schema and codegen layer from the consumer trees (#1854)
  • sdk: delete the @org/package/Type identity grammar and streamlib-idents (#1851)
  • engine: the registry, graph and control plane key on the import path (#1850)
  • idents: delete the orphaned package layer — resolver, manifest, lockfile, package source, archive (#1843)
  • sdk: strip the type from port declarations and control-plane rendering (#1831)
  • engine: streamlib::schemas::current_schema_idents and current_schema_definition are removed, along with the GET /api/schemas and GET /api/schemas/{name} control-plane endpoints.

Features

  • ci: check-clock-usage — enforce the wall-clock allowlist (#1861) (1494b08), closes #1728
  • engine: CPU readback becomes an always-present GpuContext capability (#1883) (d99755b)
  • engine: cross-process texture import for Python processors (#1899) (a28c3ce)
  • engine: delete the embedded schema registry (#1827) (fc6be3f)
  • engine: GLSL is the kernel source contract — vendored compiler, keyed cache (#1885) (83d81d4)
  • engine: graphics and ray-tracing kernels at Python parity (#1896) (2179da4)
  • engine: named N-binding compute dispatch from Python, end to end (#1882) (106570d)
  • engine: present-class escalate ops — a processor-owned window over the wire (#1935) (9a9a0e8), closes #1929
  • engine: surface checkout leases — a held frame's pool slot is never rehanded (#1869) (7e90288)
  • engine: the display name disambiguates duplicates within one graph (#1845) (c9e5fa0)
  • engine: the present-loop seam — one machinery, the built-in display folds onto it (#1934) (257581a), closes #1928
  • engine: the readback staging goes host-cached, and states its memory type on the wire (#1943) (4923876)
  • engine: the single compute dispatch runs on the same machinery as a batch (#1912) (5b8f378)
  • engine: validation findings are counted, and a rig test can fail on one (#1913) (46f609f)
  • media: a shared engine event pump — N window-owning processors in one process (#1923) (63543cd)
  • python: batched kernel dispatch — one submission, one fence (#1889) (19eafe6)
  • python: export_opaque_fd hands the OPAQUE_FD texture allocation to native code (#1905) (00abef7)
  • python: the cast object speaks DLPack — one shipped composable, VideoFrame rebuilt on it (#1931) (2079088)
  • python: the CPU doors open on texture-backed surfaces — staged read-in, block-edge publish, implied copy usages (#1945) (b30927e)
  • python: the scoped device-tensor view over a kernel output (#1902) (7d9a615)
  • python: the typed cast claims its frame — read(into=VideoFrame) pins the surface, drop releases it (#1871) (ed098d4)
  • python: the wheel's window object — a Python processor owns its debug window (#1936) (272cf3f)
  • python: the write scopes on the cast object — writable(), cpu(), and the multi-surface refusal (#1933) (ebf25af)
  • sdk: every processor descriptor carries its class's import path (#1848) (afae87c)
  • sdk: strip the type from port declarations and control-plane rendering (#1831) (45cff3a), closes #1816

Bug Fixes

  • adapters: concurrent cpu-readback reads each reserve their own timeline value (#1918) (f0a6bba)
  • ci: sync the in-tree version pins at the release bump, and gate them (#1955) (7e4917a)
  • engine: a pool surface id names the frame — recycled ids fail loudly, never serve another frame's pixels (#1877) (5a7b8dd)
  • engine: a surface-share export has exactly one fd owner — the texture DMA-BUF export mints per call instead of memoizing (#1881) (78c5bc8)
  • engine: audio tick timestamps carry the machine epoch (#1859) (a3cc658)
  • engine: bound every wire-derived length the frame-header read path trusts (#1832) (cbd6b9e)
  • engine: bridge teardown releases a crashed helper's surface-share registrations (#1906) (1640bdc)
  • engine: cross-process device export reads the pooled backing, never the producer's ring (#1868) (53d5410)
  • engine: MediaClock carries the machine monotonic epoch (#1858) (614bfa7), closes #1725
  • engine: per-link iceoryx2 port reclaim for helper-process endpoints on disconnect (#1862) (e76762e)
  • engine: RHI test fixtures build the video profiles and export memory production builds (#1895) (db09366)
  • engine: subscribe() returns Result and registers its subscriber before returning, so no event is lost to the establishment window (#1875) (655e74d)
  • engine: the DMA-BUF plane-layout query follows creation tiling, not the modifier's value (#1919) (796ea28)
  • engine: the pixel-buffer upload ends its destination in a layout the image usage allows (#1920) (683cd95), closes #1916
  • engine: the tone mapper leaves each image in a layout its usage allows (#1894) (110876b)
  • rhi: the extension-properties buffer outlives the names it lends (#1847) (11f5671), closes #1846

Performance

  • engine: the staging cache stops allocating on every lookup (d99755b)
  • engine: write frames straight into the iceoryx2 loan (#1922) (793e609)
  • xtask: optimize the lint gates so the test suite stops paying for them (#1849) (1385bd4)

Code Refactoring

  • engine: the registry, graph and control plane key on the import path (#1850) (4e2ac4b)
  • python: delete the wheel duplicate media_clock_now_ns export (#1860) (fd44620)
  • sdk: delete the @org/package/Type identity grammar and streamlib-idents (#1851) (d0dcea3)

Documentation

  • plan: re-cut the REMOVED bullet this change would have falsely retired (d99755b)

Miscellaneous

  • idents: delete the orphaned package layer — resolver, manifest, lockfile, package source, archive (#1843) (96717c8)
  • retire the manifest, schema and codegen layer from the consumer trees (#1854) (d69e753)