✈ iframe-flight

v0.1.0

Zero-copy iframe data transport — Apache Arrow bundled, no setup required

Parent window CONNECTING
⬜ CHILD_READY ⬜ PARENT_ACK ⬜ Ready
0
Sent
0
ACKed
RTT ms
Target:
Checking SharedArrayBuffer…
Child iframe child-alpha CONNECTING
Mode:
Child iframe child-beta CONNECTING
Mode:
Message inspector

No messages yet. Send data or click Reply in a child iframe.

Code examples

⭐ recommended Parent — send() picks the best format automatically
import { ArrowParentEmitter, tableFromArrays, tableToIPC } from 'iframe-flight';

const emitter = new ArrowParentEmitter(iframe);

emitter.onReady(async () => {
  // send() picks the best transfer automatically:
  // Uint8Array + SAB  →  sendArrowZeroCopy  (zero-copy ⚡)
  // Uint8Array        →  sendArrowCopy       (postMessage)
  // anything else     →  sendJSON

  const table = tableFromArrays({ id: [1,2,3], name: ['Alice','Bob','Charlie'] });
  const ack   = await emitter.send(tableToIPC(table));
  console.log(ack.rows, ack.isZeroCopy);

  // Plain object → always JSON
  await emitter.send({ userId: 42, action: 'refresh' });
});

API reference

ArrowParentEmitter ( iframe, config? )
  • send(data, opts?)Auto — zero-copy → copy → JSON
  • sendJSON(data, opts?)Any JSON-serialisable value
  • sendArrowCopy(buf)Arrow IPC via postMessage
  • sendArrowZeroCopy(buf)Arrow IPC via SharedArrayBuffer ⚡
  • onReady / onStateChange / onErrorLifecycle hooks
  • isSABSupported() / getState()Introspection
  • close()Reject pending ACKs, cleanup
ArrowChildReceiver ( config? )
  • onData(cb)result.table (Arrow) or result.data (JSON)
  • resumeListening()Re-enable after FIRST_MESSAGE
  • onStateChange / onError / close()Same as emitter
Apache Arrow re-exported from iframe-flight
  • tableFromArrays(cols)Create Arrow table from arrays
  • tableToIPC / tableFromIPCSerialize / deserialize