Binary Data

Send and receive ArrayBuffer data natively over WebSocket using live.binary().

Server

// src/live/files.js
import { live } from 'svelte-realtime/server';

export const uploadImage = live.binary(async (ctx, buffer) => {
  const id = crypto.randomUUID();
  await storage.write(id, buffer);
  return { id, size: buffer.byteLength };
});

Client

<script>
  import { uploadImage } from '$live/files';

  async function handleFile(e) {
    const file = e.target.files[0];
    const buffer = await file.arrayBuffer();
    const result = await uploadImage(buffer);
    console.log('Uploaded:', result.id);
  }
</script>

<input type="file" onchange={handleFile} />

Binary RPCs bypass JSON serialization - the raw ArrayBuffer is sent as a WebSocket binary frame.

Was this page helpful?