npm.io
0.5.1 • Published 4h ago

@voyant-travel/payments

Licence
Apache-2.0
Version
0.5.1
Deps
1
Size
104 kB
Vulns
0
Weekly
0
Stars
5

Voyant

Voyant

The open-source travel commerce framework for OTAs, tour operators, and DMCs.

Voyant is released under the Apache 2.0 license. Current @voyant-travel/core npm version. Issues welcome! Follow @voyant_travel

Documentation | Website

Voyant ships deployable starter apps, durable workflow orchestration, and a wide set of headless domain modules (catalog, commerce, inventory, operations, relationships, quotes, bookings, finance, distribution, legal, charters, cruises, accommodation resale, and more) that you compose into your own travel platform.

Getting started

Install the CLI, scaffold an app from a first-party starter, and run it locally.

# 1. Install the CLI
npm install -g @voyant-travel/cli

# 2. Scaffold a project from the operator starter
voyant new my-travel-app
cd my-travel-app
pnpm install

# 3. Configure the app
cp .env.example .env
# set your secrets (DATABASE_URL, BETTER_AUTH_ADMIN_SECRET, …) in .env

# 4. Run the app
pnpm db:migrate
pnpm dev

voyant new scaffolds from the operator starter by default. Pass --starter <name> to pick another built-in starter (downloaded from GitHub Release assets for the matching CLI release), or point it at a custom local starter directory.

Visit the documentation to learn more.

What is Voyant?

Voyant is a framework for building travel commerce platforms. Instead of a monolithic booking system, it gives you composable, headless domain modules and deployable application shells that you own and extend.

  • Deployable application shells, not just isolated packages. First-party starters ship as real, runnable apps.
  • A normalized travel operations data model on PostgreSQL + Drizzle.
  • Headless domain modules for catalog, commerce, inventory, operations, relationships, quotes, bookings, finance, distribution, legal, charters, cruises, accommodation resale, and more.
  • Hono-based API transport with optional Next.js route helpers.
  • Durable, step-based workflow orchestration that runs on self-host infrastructure or Voyant Cloud's hosted runtime.
  • Better Auth wiring in first-party starters, with core packages staying auth-provider agnostic.
  • Versioned React packages per domain (relationships-react, inventory-react, commerce-react, bookings-react, …) consumed as ordinary dependencies: hooks, clients, providers, query keys, and reusable UI that wrap each module's HTTP contract.
  • Optional integrations for payments, e-invoicing, storage, CMS sync, and notifications.

Voyant supports accommodation as catalog inventory for resale, packaging, and trip composition. It is not positioned as a hotel PMS or first-party hotel-operations system. See docs/architecture/accommodation-resale-boundary.md.

Starters

Voyant ships one first-party starter:

Starter Purpose Stack
starters/operator Tour operator workflows Cloudflare Workers, TanStack Start, Hono, Better Auth, Drizzle

The framework surface

Core platform
Package Description
@voyant-travel/core Module system, container, event bus, and plugins
@voyant-travel/db Drizzle schemas, TypeID, and database adapters
@voyant-travel/hono createApp, middleware, auth, and actor guards
@voyant-travel/react Shared React provider and typed fetch client
@voyant-travel/auth Better Auth wiring for first-party starters
@voyant-travel/auth-react Auth React hooks and components
@voyant-travel/types Shared workspace types
@voyant-travel/utils Shared utility functions
@voyant-travel/voyant-test-utils Test helpers (db, http, seq, cli)
@voyant-travel/cli The voyant CLI: scaffolding, generators, and db tooling
@voyant-travel/storage StorageProvider abstraction (local, R2, S3)
@voyant-travel/i18n Internationalization primitives
Travel domain modules
Package Description
@voyant-travel/catalog Products, tours, packages, and media
@voyant-travel/commerce Pricing, offers, and sellability
@voyant-travel/inventory Bookable inventory and availability
@voyant-travel/operations Suppliers and operational logistics
@voyant-travel/bookings Booking lifecycle and participants
@voyant-travel/finance Invoicing, payments, tax, and profitability
@voyant-travel/legal Contracts and policies
@voyant-travel/notifications Email/SMS provider abstraction
@voyant-travel/distribution Channel distribution
@voyant-travel/relationships CRM: people, organizations, and pipelines
@voyant-travel/quotes Quotes and trip revisions
@voyant-travel/trips Trip composition and itineraries
@voyant-travel/identity Contact points, addresses, and named contacts
@voyant-travel/storefront Public booking-portal surface
@voyant-travel/accommodations Accommodation resale inventory
@voyant-travel/charters Charter products
@voyant-travel/cruises Cruise products
@voyant-travel/flights Flight products
Workflows (durable orchestration)

Step-based workflows with durable state, retries, and a shared wire protocol, runnable on self-host infrastructure or Voyant Cloud's hosted runtime.

Package Description
@voyant-travel/workflows Authoring SDK, with ./bindings, ./config, and ./errors subpaths
@voyant-travel/workflows-orchestrator Orchestrator engine and Postgres self-host runtime primitives
@voyant-travel/workflows-react Run-inspection hooks, plus an importable admin UI at ./ui

Self-hosting composes the ./selfhost export of @voyant-travel/workflows-orchestrator (the Node runtime) with the @voyant-travel/workflows-react/ui dashboard; Voyant Cloud provides the same runtime as a managed service.

UI and React families

Reusable frontend surfaces live in the matching -react package for each domain module. Those packages own hooks, clients, providers, query keys, view-model helpers, reusable components, and ./ui owner paths where needed. For example, @voyant-travel/relationships-react, @voyant-travel/quotes-react, @voyant-travel/inventory-react, @voyant-travel/commerce-react, and @voyant-travel/bookings-react. Bookings requirements live under @voyant-travel/bookings-react/requirements; checkout UI lives under @voyant-travel/finance-react/checkout-ui. The shared admin shell lives in @voyant-travel/admin; cross-cutting primitives in packages/ui.

Plugins
Package Description
@voyant-travel/plugin-netopia Netopia payments
@voyant-travel/plugin-smartbill SmartBill e-invoicing (Romanian tax compliance)
@voyant-travel/plugin-payload-cms Payload CMS sync
@voyant-travel/plugin-sanity-cms Sanity CMS sync

Architecture

Voyant keeps a strict boundary between reusable business logic and deployment shells:

  • packages/* hold reusable business logic, schemas, services, routes, adapters, and contracts
  • starters/* and app shells own UI, auth wiring, deployment shape, and runtime-specific configuration
  • Core packages stay framework-agnostic even when first-party starters use React, TanStack Start, Hono, Better Auth, and Cloudflare Workers
  • Transport adapters stay thin and call shared domain services rather than owning business logic
  • Workflow business logic ships as plain SDK packages; orchestrator/runner apps wrap them for a given runtime

Architecture decisions live in docs/adr/; domain conventions live in docs/architecture/; per-minor migration notes live in docs/migrations/.

Security model

One Postgres database + one runtime per organization. Tenancy is enforced at the deployment boundary, not by in-process middleware, so new package work under packages/* should not add in-process tenant scoping. See ADR-0001 for the full rationale, the alternatives considered, and the conditions under which the decision should be revisited.

Contributing

This repository is the workspace that powers the framework, starters, runners, and examples.

Area What it contains
packages/* Reusable business logic, schemas, services, transport adapters, and integrations
packages/plugins/* First-party plugin bundles (payments, invoicing, CMS sync)
starters/* First-party starter apps
apps/* Reference/demo apps, the shadcn registry host, and agent workers
examples/operator-demo Destructive and generated Operator demo fixtures
Monorepo commands

Voyant uses pnpm workspaces and Turborepo.

Command Description
pnpm install Install workspace dependencies
pnpm build Build the workspace with Turborepo
pnpm typecheck Run workspace typechecks
pnpm test Run workspace tests
pnpm test:bookings:integration Start or reuse the Docker test Postgres, ensure the bookings test schema, and run the bookings integration files serially
pnpm lint Run Biome checks across the repo
pnpm generate:schema-docs Regenerate SCHEMA.md from the Drizzle table definitions
pnpm -F operator dev Start the operator starter on port 3300
Integration test database

The shared Docker test Postgres is defined in docker-compose.test.yml.

  • default host port: 5436
  • override with TEST_DATABASE_PORT
  • override the full connection string with TEST_DATABASE_URL

For the bookings package, contributors can use:

pnpm test:bookings:integration

That helper starts or reuses the Docker test DB, applies starter migrations, ensures the current additive bookings-session table exists, and runs the bookings DB-backed integration files serially to avoid deadlocks from concurrent table truncation.

Community & support

Credits

Voyant is created and maintained by PixelMakers.

License

Licensed under the Apache License, Version 2.0 (Apache-2.0).