Skip to main content
OnArrival

Ship a full travel stack inside your product.

Bring travel into the app your customers already use: a neobank, a property marketplace, an HR suite. White-label or co-branded, and you stay the brand of record.

How it shows up

Native to the product. Owned by your brand.

01
Sandbox inventory
Render test inventory, then use the integration phase for theming, validation and production readiness.
02
Web or native, one backend
React, React Native, Vue, web components, iOS and Android: six render targets, one backend and one offer schema behind every one of them.
03
Brand of record, headless if you need it
You stay the brand of record. Take the full UI, or take just the APIs in headless mode and build your own. A strong design system never has to bend to ours.
Implementation path

From sandbox to production.

Start with sandbox inventory, then validate theming, analytics, payment flows and servicing before production.

  1. Install

    Drop in the SDK

    One package, one API key. Sandbox inventory is live the moment you authenticate.

  2. Theme

    Match your brand

    Tokens for colour, type, radius and spacing map onto every component automatically.

  3. Compose

    Pick your products

    Flights, stays, experiences, insurance: render only what your app needs.

  4. Measure

    Stream the data

    Every search and booking event flows to your warehouse from day one.

In your UI

Your checkout, your design system.

The same flow your customers already trust, now booking a flight, a stay, or a full bundle without ever leaving your app.

Pixel-matched theming

Components inherit your tokens: no iframe, no visual seams.

Composable building blocks

Use the full flow, or just the pieces you need.

Accessible by default

Keyboard, screen-reader and WCAG 2.2 AA contrast built in.
Why zero iframes matters

No iframe. No seams.

An iframe is the easy way to embed and the wrong one. It walls your travel surface off from the host page: styling, focus, cookies and bundling all break at the frame boundary. We compile into your app instead.

Your tokens, not ours

Components compile against your design system at build time, so radius, type and colour match pixel-for-pixel, not a best-effort theme bolted onto a frame.

Real focus and a11y

One tab order, zero trapped-focus loops: keyboard order, screen-reader labels and WCAG 2.2 AA contrast flow through the host page, not two competing tab loops at a frame boundary.

No third-party-cookie tax

State isn’t sandboxed in a cross-origin frame, so Safari/ITP and cookie-blocking don’t silently break checkout halfway through a booking.

One bundle, code-split

The search component lazy-loads at ~38 kB gzipped and is interactive in well under a second: only what a surface uses, not a second full app (often 300 kB+) loaded inside a frame on every page.
Capabilities

The SDK surface.

Embed
  • React + React Native + Vue
  • Web components
  • iOS + Android
  • Server-driven UI
  • Lightweight bundle
Theme
  • Design tokens
  • Light + dark
  • Custom fonts
  • Locale + currency
  • RTL support
Compose
  • Any product
  • Bundle builder
  • Upsell slots
  • Custom steps
  • Headless mode
Operate
  • Event webhooks
  • Warehouse sync
  • A/B hooks
  • Error envelopes
  • Versioned releases
Surfaces

Every step, on brand.

Search, offers, checkout and post-booking: every surface inherits your brand.

Search

Origin, dates, travellers. Your styling.

Offers

Fares and rooms with branded fare rules.

Checkout

Payment, traveller details, insurance attach.

Manage

Changes, refunds and disruption rebooks.
What teams ship

Fast, native, accessible.

Get started
Make travel feel native before production is in scope.
Related

Pairs well with

Most of our customers use two or three of these together.

Related reading

All field notes →