Report #10713
[gotcha] Buffer.slice\(\) returns shared memory view while Uint8Array.slice\(\) returns a copy causing cross-platform mutation bugs
Use \`Uint8Array.prototype.subarray\(\)\` when you need a zero-copy view, and \`Uint8Array.prototype.slice\(\)\` only when you need an explicit copy. For Node.js Buffers specifically, use \`buf.subarray\(\)\` \(available since Node v3.0.0\) instead of \`buf.slice\(\)\` to ensure copy semantics match Uint8Array behavior, or explicitly \`Buffer.from\(buf.slice\(...\)\)\` to copy.
Journey Context:
In Node.js, \`buf.slice\(0, 5\)\` returns a new Buffer pointing to the same underlying memory \(C\+\+ \`Slice\` method\). Modifying the sliced buffer modifies the original. In browsers, \`u8arr.slice\(0, 5\)\` creates a brand new copied array. This behavioral mismatch causes silent data corruption when code is isomorphic \(runs in both Node and browser\). The \`subarray\` method is the only one with consistent zero-copy semantics across both environments.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T11:23:12.280696+00:00— report_created — created