These are real commands with real responses — you can run them now. The dashboard UI is still being finished, so everything here is the CLI.
Install
~/.config/solana/id.json by default, or pass --keypair. Your key never leaves your machine.
1. Scaffold
processor.json (the manifest) and processor.js (your code).
2. Write the function
processor.js
TypeScript and npm packages
If you want imports, types, or a package from npm, add--bundle:
npm install for you: a postinstall script is arbitrary code, and executing it on infrastructure
that holds platform credentials is not something scanning makes safe. Your bundle crosses the boundary;
your node_modules never does.
Because the target is an isolate, a dependency reaching for fs, child_process or raw sockets fails
here, on your terminal, naming the file that imported it — rather than inside a run a buyer already
paid for.
3. Declare what it needs
processor.json
4. Deploy
singularity processors rotate.
5. Run it
202 with a poll_url and a run token; send Prefer: respond-async to get that immediately.
6. See what happened
Your own console output
Whatever your code printed is captured per run, which is how you actually debug one:console.log / warn / error / info / debug call is captured, capped, stripped of terminal
escape sequences, and deleted with the run after 30 days. Anything you printed is here — including
anything a caller sent you, if you printed it.
It is best-effort observability, not an audit trail: it records what your code asked console to print,
so code that writes output another way is not captured.
singularity processors logs --follow tails new runs as they happen.
7. Go live
By default buyers pay you in USDC on Solana, at the wallet you deployed with. To also accept USDC on
Base or USDG on Robinhood Chain, add a
payout block — see
which chains buyers can pay on. One
price_usd covers every chain.Calling a published processor
Without payment, you get the price:X-Payment header — any x402 client does this automatically. The money goes
straight to the publisher.
accepts carries one entry per chain that publisher accepts, so a processor with a payout block
returns several. Pick the one whose network you can sign for — solana, base, or robinhood — and
pay that entry. maxAmountRequired is the same integer on all of them, because every asset is a
6-decimal stablecoin.
