Back to docs

Delivery SDK

Build delivery timelines and courier visibility.

Use DomVia Realtime delivery patterns for UPS-style package progress, Uber-style courier movement, same-day dispatch, customer tracking, and operator dashboards.

Architecture

How this guide should be used.

Step 01

Use delivery status as the timeline

Delivery status events are the customer-facing story. They should be stable, readable, and easy to display in product screens.

Step 02

Use location as a supporting stream

Live location is useful while the courier is moving, but it should not replace status events like picked up, nearby, delayed, or delivered.

Step 03

Separate customer and operator visibility

Operators may need more detail than customers. Use authorization to control which delivery events each viewer can receive.

Step 04

Store final history on your server

Realtime events are for instant updates. Your app server should still store the delivery record, audit trail, proof, and final status.

Examples

Focused implementation notes.

Customer delivery stream

Subscribe to one protected delivery channel and listen for status, ETA, driver, completion, and location updates.

Customer delivery stream

import { DomViaRealtime } from "@domvia/realtime";
import { createDeliveryStream } from "@domvia/realtime-delivery";

const realtime = DomViaRealtime.create({
  key: "pk_live_your_public_key",
  host: "ws.domvia.net",
  authEndpoint: "/realtime/auth",
});

const delivery = createDeliveryStream(realtime, {
  deliveryId: "order-1001",
  mode: "delivery",
  channelKind: "private",
  sessionId: "day-2026-05-26",
});

delivery.onDriverAssigned((event) => {
  console.log("Driver assigned:", event.driver_id);
});

delivery.onStatus((event) => {
  updateTimeline(event.status, event.message);
});

delivery.onLocation((event) => {
  map.moveMarker(event.lat, event.lng);
});

delivery.onCompleted((event) => {
  showCompletedState(event.completed_at);
});

Server-side delivery events

Use stable event builders before broadcasting from your trusted server.

Server-side delivery events

import {
  buildDeliveryEtaEvent,
  buildDeliveryStatusEvent,
  buildDriverAssignedEvent,
} from "@domvia/realtime-delivery";

const assigned = buildDriverAssignedEvent("order-1001", {
  driver_id: "driver-44",
  driver_name: "Demo Driver",
  vehicle: {
    label: "Blue van",
    plate_number: "DV-2026",
  },
});

const status = buildDeliveryStatusEvent("order-1001", {
  status: "in_transit",
  message: "Driver is on the way.",
  eta_seconds: 420,
});

const eta = buildDeliveryEtaEvent("order-1001", {
  eta_seconds: 420,
  distance_meters: 1800,
  confidence: "high",
});

Safety

Rules before production traffic.

Use private channels for delivery-specific customer updates.

Do not expose internal driver notes to customer channels.

Keep raw GPS separate from customer-facing delivery status.

Rate-limit noisy updates so high-volume delivery apps stay stable.

Keep permanent records on your trusted server.

Continue

Keep reading without crowding the main docs page.