Patch Notes 0.1.1 and 0.1.2
MayaFlux 0.1.1: Stability, Determinism, and Platform Hardening
18th January 2026
MayaFlux 0.1.1 is a maintenance release focused on stability, correctness, and platform robustness. There are no new user-facing features and no API changes.
This release tightens behavior introduced in 0.1.0, with particular attention to shutdown safety, live coding reliability, and cross-platform edge cases.
Scope
- Bug fixes
- Internal refactors
- Performance and allocation improvements
- Platform-specific robustness
- Build and packaging cleanup
Existing projects built against 0.1.0 should continue to compile and run without modification.
However, the new internal API around ::Await() is not included in the old main.cpp.
Add that single line manually or simply create a new project from the 0.1.1 template
and move your existing classes, files and resources over.
Shutdown and Lifecycle Safety
Engine shutdown has been made deterministic and race-safe across audio, graphics, node networks, and coroutines.
- Audio callbacks now terminate in a defined order
- Node processing and coroutine execution are guarded against late execution during teardown
- Graphics resources are released in a strictly ordered sequence
- Cross-domain coordination is prevented from executing after shutdown begins
These changes address rare but real issues observed during live coding, repeated start/stop cycles, and application exit under load.
macOS Stability Improvements
Several fixes address macOS-specific lifecycle and threading constraints:
- All GLFW and Cocoa interactions are dispatched on the main thread
- Lila live coding server and Clang interpreter execution are enforced on the main thread
- Vulkan and MoltenVK initialization and teardown paths are hardened
- Temporary Homebrew runtime environment handling is formalized
- Window teardown and resizing edge cases are stabilized
These changes improve reliability during live coding and repeated execution on macOS.
Performance and Allocation Cleanup
Internal refactors reduce unnecessary work and improve predictability:
- Persistent
NodeContextreuse removes per-frame context allocation - GPU sync and output nodes now use persistent graphics contexts
- Event loop dispatch is eliminated for
NodeNetworknodes where unnecessary - Buffer management and stochastic generation are tightened
No observable behavior changes are intended.
Execution and Dispatch
- Introduction of a new parallel dispatch executor
- Cleaner separation between execution coordination and domain logic
- Improved scheduling behavior under mixed audio and graphics workloads
Build and Packaging
- Windows build script and versioning fixes
- Debian and Ubuntu packaging cleanup
- Minor cross-platform build improvements
Availability
- Platforms: Windows, macOS, Linux
- Distribution: GitHub releases, Launchpad PPA, COPR, AUR, Homebrew
- Version: 0.1.1
No migration steps are required.
Commit Summary
See full diff: Github
56d505b41 (github/develop, develop) bump version for release
3053209e0 update(windows): Build scripts and versioning
ba55ef5d0 (origin/develop, codeberg/develop) fix(build): Various minor build improvements
f486e35ba fix(debian): Simplify changelog entry for Ubuntu packaging
3e867ccde (github/backport/clean_shutdown, backport/clean_shutdown) fix(macos): avoid main-loop teardown issues during window shutdown
a703c865e fix(shutdown): make audio callbacks and engine termination fully race-safe
326ea7b8b fix(shutdown): tighten node and coroutine termination ordering and guards
2b094b675 fix(audio): make engine shutdown audio-safe and deterministic
813588ebf fix(graphics): harden shutdown order and resource teardown across graphics stack
4033ddfe9 (backport/performance) fix(Various): Improve buffer management and stochastic generation
a6a3ee9e5 refactor(graphics): add persistent contexts for GPU sync/output nodes
3c8e97b15 refactor(nodes): eliminate context allocations and reuse persistent NodeContext
eedb7cf38 refactor(Nodes): Do not fire event loop for NodeNetwork nodes
84f1a0d48 (backport/cocoa_live_coding) fix(macos): run Lila server and Clang interpreter on main thread
802d20d3f update(macos): Temporary workaround for homebrew runtime dirs
40136e3d0 (backport/moltenvk_cocoa) fix(macos): Use homebrew like env file
f8a5a5291 refactor(macos): dev script simplification
b6601f8cb refactor(macos): move Await into Engine-owned main thread loop
95c145daa chore(updates): Minor mac compatibility improvements
22a47e3d3 feat(Executor): New Parallel dispatch class
0274a57d6 fix(macos): Temporarily disable resizing
024c5841b refactor(macos): dispatch all glfw calls to main - Pass II
576b100a8 fix(macos): Minor improvements to Vulkan backend on macOS
4f8798726 feat(API): Add Await function for main thread blocking
c54375e4d fix(glfw): Try main thread diversion on macOS
8c10cc0ed fix(macos): Update required Vulkan extensions for MoltenVK
d729ef4e2 chore: bump version to 0.1.1
MayaFlux 0.1.2: Buffer Semantics Correction, Deterministic Stochastic Processing, and Shader Fixes
23rd January 2026
MayaFlux 0.1.2 is a corrective release addressing a necessary API break, a critical Vulkan pipeline bug, and several internal performance and determinism improvements.
This release intentionally lands early to establish correct long-term semantics before downstream code solidifies around incorrect assumptions.
Breaking Change: Explicit Temporal Buffer Semantics (std::span)
Affects:
Polynomiallambdas (recursive and feedforward modes)Logicsequential mode lambdas- Related context accessors, tests, and tutorials
What changed
- Lambda parameters previously typed as
std::deque<T>are nowstd::span<T> - Internal history storage is now implemented as explicit ring buffers
- Lambdas receive a linearized temporal view rather than a mutable container
Why
- Removes implicit allocation and push/pop semantics
- Makes temporal ordering explicit and deterministic
- Decouples user logic from internal storage representation
- Enables zero-allocation, real-time–safe execution
- Aligns CPU and GPU contexts under a unified data contract
This is a deliberate semantic correction, not a cosmetic refactor.
Logic & Polynomial Internals
- Introduced explicit ring buffers with linearized views
- Removed implicit buffer construction paths
- Unified context propagation across CPU and GPU execution
- Preserved observable behavior while making time semantics explicit
These changes make recursive systems, filters, and sequential logic predictable and inspectable.
Stochastic Generator Performance & Determinism
- Added fast xorshift-based uniform RNG for hot paths
- Cached normal and exponential distributions
- Introduced lazy rebuilds via dirty flags on parameter changes
- Eliminated per-sample
std::distributionreconstruction - Made
set_normal_spread()safely invalidate cached distributions
These changes significantly reduce overhead in stochastic-heavy graphs while preserving statistical correctness.
Shader Pipeline Fix: Push Constant Size Calculation
Fixed
- Pipelines could be created with zero-byte push constant ranges when push constants were set via
set_push_constant_data()instead of staging buffers
Resolution
- Pipeline initialization now:
- Uses staging buffer size when available
- Falls back to the processor’s internal push constant data size
- Ensures correct allocation regardless of data source
Affected
RenderProcessorComputeProcessor
This fixes a silent but critical Vulkan correctness issue.
ShaderProcessor Consistency
set_push_constant_data()now updates push constant size when required- Prevents mismatches between stored data and pipeline layout
- Explicitly enforces Vulkan push constant limits
Build & Portability
- Added external GLSL → SPIR-V compilation fallback when Shaderc is not enabled
- Improves portability and minimal build configurations
Documentation
- README updated to reflect correct shutdown and main-thread flow using
MayaFlux::Await()
Migration Notes (Important)
If you have lambdas like:
[](const std::deque<double>& buffer) { ... }
Update them to:
[](std::span<double> buffer) { ... }
No other logic changes should be required.
Commit Summary
3c08747d5 bump release version to 0.1.2
5683d9caf build: introduce external GLSL→SPIR-V compiler fallback
08a94cdf6 perf: optimize stochastic generator with cached distributions and fast RNG
72871a380 refactor: replace deque-based history with span-backed ring buffers
66c29a52e fix(shaders): update push constant size when setting data
7dccd8216 fix(shaders): correct push constant size calculation