Skip to main content
These steps take a fresh machine to a verified checkout. Everything after them, running the service or reproducing the evidence, starts from here.
The current release is v0.2.1 (changelog). It is also published as the container image ghcr.io/tolgayayci/rail402:0.2.1 (Docker) and as the npm packages @rail402.dev/facilitator, bazaar, search, store-postgres, stellar and errors, version 0.2.1.

Prerequisites

The pinned versions live in mise.toml, .node-version (used by CI) and the packageManager field of package.json.

Clone and install

pnpm install resolves from pnpm-lock.yaml. Install scripts are denied unless the workspace allows them; onnxruntime-node ships its CPU binaries in the package, so its download script is deliberately not run.

Verify

pnpm verify runs, in order, and stops at the first failure: CI (.github/workflows/ci.yml) runs the same command on every push to main and on every pull request, followed by pnpm build.

Build

This compiles every workspace package to its dist/ directory. The service entry points are then apps/rail402/dist/main.js (the HTTP service) and apps/rail402/dist/channels.js (the channel commands).

Integration tests

Integration tests run against Postgres and a private Stellar network with 1-second ledgers, real accounts and a real token contract. They need the embedding model on disk.
The private network runs with the testnet passphrase so the unmodified @x402/stellar scheme works against it. It resets whenever its container is recreated. Stop everything with docker compose --profile stellar down.

Run the service from source

To run the service without the container image, fetch the model, start Postgres and set the three required variables. The Docker page shows how to create and fund a testnet sponsor account.
Run it from the repository root: the model directory defaults to .models, relative to the working directory (SEARCH_MODEL_DIR). On first start the service applies its database migrations and, on testnet, creates its channel accounts. Check it with curl localhost:8080/ready.

Reproduce the published results