Publish a Module
Signed handler bundles that add new providers or capabilities. Free by default; flip one flag to sell them with offline-verified licenses.
Module anatomy
A module is three files under ~/.railcall/station/modules/<slug>/. The loader verifies the Ed25519 signature before importing the handler — a bad signature refuses to load.
~/.railcall/station/modules/your-handle/example/
├── module.json # manifest — slug, commands, license flag
├── handlers/
│ └── handler.py # your handler code
└── module.sig # Ed25519 signature over the bundlemodule.json
The manifest declares the commands your handler exposes and whether the module is gated behind a license. Keep it minimal.
{
"slug": "your-handle/example",
"version": "0.1.0",
"description": "Short one-liner shown on the listing.",
"commands": [
{ "name": "do_thing", "description": "What this command does." }
],
"license_required": false
}Signing & publishing
railcall market publish signs the bundle with your publisher key and uploads it. Users install the same way they install workflows.
railcall market claim your-handle/example
railcall market publish
# ↳ writes module.sig
# ↳ uploads to railcall-marketplace-lggm.onrender.comMaking it paid
Flip license_required: true in module.json. The loader then refuses to import the handler unless a valid entitlement is present for this install.
{
"slug": "your-handle/example",
"version": "0.1.0",
"license_required": true
}Licenses are minted by the RailCall license service (railcall-license.onrender.com), bound to the buyer's install pubkey, and verified offline against the pinned issuer public key. Seven-day grace past expiry so a flaky network doesn't break production.
Live example: sami666/salesforce
Thirteen commands across leads, contacts, accounts, opportunities, and cases. OAuth 2.0 refresh flow via railcall connect salesforce. $199/mo. That's the reference shape for a paid connector.
Live example: sami666/hubspot
Two commands (create_contact, log_note), Bearer token auth, free. That's the reference shape for a free connector.
What buyers do
railcall market install your-handle/example
railcall license activate your-handle/example # only if license_required
railcall license verify # offlinemodule.sig. The publish command re-signs on every upload; a stale or forged signature bounces at load time and users see the failure.Revenue
RailCall takes 5% at checkout. Wallet-and-payout model — earnings accumulate in your marketplace wallet and you withdraw when you're ready.