Skip to main content
Rust adds bounds-checked write_at, read_at, and write_bytes methods. Go supports standard reader, writer, and seeker interfaces; copied handles share ownership and position. Go copy operations cache the mapping view to avoid repeated cgo calls.Python adds wait_async and packaged type stubs. Async waits retain the mapping through close and cancellation; the native wait continues until notification or timeout.C header generation is now an explicit command with a freshness check in CI. Ordinary builds skip cbindgen. Moon 2 tasks use the installed runtimes and build the Rust interop fixture before Python tests.Region opens now reject truncated mappings and inconsistent headers. Failed mapping operations release their resources. Closing the creator removes the name while existing readers keep their mappings.The ring supports multiple producers and consumers, configurable capacity, try_push, and queue stats. Its tests check concurrent delivery and counter wraparound.try_wait is available in Rust and the adapters. Linux waits retry interruptions and spurious wakes; macOS waits use bounded spinning followed by short sleeps. C exports reject null input pointers and document their pointer contracts.Node buffers and Python views retain their mappings until collection. Bun and Deno close handles idempotently. Java uses signal() and waitForNotification() to avoid Object monitor methods. C++ accepts non-terminated string views and now has a compiled integration test.The integration runner includes a Rust-to-Python process test. CI covers all adapters and adds an aarch64 Linux core job. The Valgrind job runs the test executable directly and propagates failures. Benchmark and lifecycle documentation now describe the implemented behavior and measurement limits.

New features

Java and C# adapters. Zinc now ships official adapters for Java and C#, alongside integration tests and benchmarks. See Java and C# for setup and usage.JavaScript, Python, Go, and C++ adapters. First-class language bindings are now available for Node.js, Bun, Deno, Python, Go, and C++.Stable C ABI. A cbindgen-generated header is now published so any language with C FFI can integrate against Zinc. See the C ABI reference and header.Per-language release workflow. Adapters now follow an automated release pipeline with per-language READMEs, making installs and version tracking easier across ecosystems.

Updates

POSIX-only platform support. The Windows backend has been removed. Zinc now officially targets Linux and macOS, both of which use POSIX shared memory (shm_open + mmap). See platform notes for per-platform behavior.Socket-specific iteration helpers. New helpers make it easier to iterate over socket-style workloads when benchmarking or building socket-replacement adapters.Expanded test coverage. Adapter test suites for Python and Go have been added, and the Rust core test suite has been broadened across CI targets.Refreshed benchmarks. The benchmarks page now includes mmap and gRPC comparisons, plus a heap-vs-Zinc 1 GB throughput run and a Zinc-vs-Unix-socket data transfer comparison. Result tables use box-drawing characters and color for readability, with example images embedded.

Bug fixes

Linux futex stability. Fixed an EAGAIN handling bug and a region wait race in the Linux futex path. Also fixed a private-flag mismatch that could occur across separately mmap-ed regions.Lock-free ring pointer. Resolved a pointer bug in the lock-free ring that could surface under concurrent producers/consumers.Device identifier. Corrected the device identifier reported by regions on certain hosts.Benchmark accuracy. Fixed a notify/wait race where the notifier thread completed too early, resolved a socket-benchmark deadlock on large payloads, and added stale shared-memory cleanup before region creation to prevent AlreadyExists errors. The throughput benchmark now uses a persistent writer thread for accurate notify latency and includes a 1 GB run.