Community rails
Rails published by others, how to get yours listed, and how a rail becomes an official @tollstile/* package.
Anyone can add a payment protocol or provider to Tollstile. A rail is a package that follows the contract and passes the conformance kit; core never needs to change. Start with Build a rail.
Listed rails
No community rails are listed yet. Be the first: list your rail.
| Package | Protocol or provider | Conformance | Verified against | Maintainer |
|---|---|---|---|---|
| — | — | — | — | — |
A listing means the checklist below is met. It is not an endorsement: read a rail's README and verification status before it moves your money.
Three ways to ship a rail
| Who uses it | What it takes | |
|---|---|---|
| In your app | You | createRail() in your code, passed to createTollstile({ rails }). Nothing else. |
| Community rail | Anyone who installs it | Publish it yourself and meet the listing checklist |
Official @tollstile/* | Everyone who trusts the Tollstile name | Live in this repository and meet the acceptance criteria |
Most rails should go in that order: prove it in your own app, publish it, gain users and a sandbox record, then propose it.
Listing checklist
- Named
tollstile-rail-<name>or@<scope>/tollstile-rail-<name>, with thetollstile-railkeyword tollstileas a peer dependencyrailConformance()runs in its tests; the README says which cases pass and why any are skipped- The README states capabilities, flows, what
datastores, retry behavior, and what was verified against the provider's sandbox or testnet - No secrets, tokens, or payer evidence in errors, events, receipts, or logs
Becoming official
An official rail carries Tollstile's name, so it must meet all of these:
- Every conformance case passes, or is skipped for a reason that holds for the protocol
- A recorded run against the provider's sandbox or testnet: a payment, a replay, a handler failure, and a lost response resolved by reconciliation
- The protocol has real users and a public specification or API reference
- A named maintainer who answers issues for it
- It meets SPEC.md: canonical payer ids, amounts checked against the quote or configuration,
proofIdon rejected-but-genuine proofs, provider failures thrown asPROVIDER_*, evidence redacted, no secrets anywhere visible - No protocol-specific change to core
- A docs page and a complete README
Propose it with a rail proposal. The full policy is in CONTRIBUTING.md.