loading…
Search for a command to run...
loading…
Phase 2.x — MCP (Model Context Protocol) server scaffolding for the catalog plane. Wraps the catalog plane's APIs as agent-callable tools so AI assistants (Clau
Phase 2.x — MCP (Model Context Protocol) server scaffolding for the catalog plane. Wraps the catalog plane's APIs as agent-callable tools so AI assistants (Claude, ChatGPT plugins, custom agents) connect with tenant-scoped credentials and call tools rathe
The open-source travel commerce framework for OTAs, tour operators, and DMCs.
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.
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 .dev.vars.example .dev.vars
# set your secrets in .dev.vars, and DATABASE_URL in .env
# 4. Run the app
pnpm db:migrate
pnpm dev
voyant newscaffolds from theoperatorstarter 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.
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.
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.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.
Voyant ships one first-party starter:
| Starter | Purpose | Stack |
|---|---|---|
| starters/operator | Tour operator workflows | Cloudflare Workers, TanStack Start, Hono, Better Auth, Drizzle |
| 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 |
| 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 |
| @voyant-travel/octo | OCTO connectivity for tours and activities |
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.
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.
| 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 |
Voyant keeps a strict boundary between reusable business logic and deployment shells:
packages/* hold reusable business logic, schemas, services, routes, adapters, and contractsstarters/* and app shells own UI, auth wiring, deployment shape, and runtime-specific configurationArchitecture decisions live in docs/adr/; domain conventions live in docs/architecture/; per-minor migration notes live in docs/migrations/.
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.
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 |
| apps/scripts | Workspace scripts (e.g. seed operator data) |
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 |
The shared Docker test Postgres is defined in docker-compose.test.yml.
5436TEST_DATABASE_PORTTEST_DATABASE_URLFor 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.
Voyant is created and maintained by PixelMakers.
Licensed under the Apache License, Version 2.0 (Apache-2.0).
Run in your terminal:
claude mcp add catalog-mcp -- npx -y @voyantjs/catalog-mcpYes, Catalog Mcp MCP is free — one-click install via Unyly at no cost.
No, Catalog Mcp runs without API keys or environment variables.
Self-hosted: the server runs locally on your machine via the install command above.
Open Catalog Mcp on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Low riskAutomated heuristic from public metadata — not a security guarantee.