Build
Run a worker
Turn your browser or GPU into a worker and earn USDC for the compute you share.
A worker is the other half of the network: a browser tab or a native machine that claims jobs, runs the model, and gets paid in USDC for the tokens it produces. No data center required — just compute you already have, sitting idle.
Two ways to contribute
Browser worker
Click start and ashao loads a small model into your browser with WebGPU. No install, nothing to configure — the tab becomes a worker for the Pro queue.
Native worker
For heavier capacity, a native worker uses your GPU directly and can serve the Max queue. Same protocol, more horsepower.
What you earn
When your worker completes a job, you're credited the worker share of the value that job created. Stakers earn the boosted rate.
70% — base
Every worker keeps 70% of the value of the jobs it completes, paid in USDC. The protocol keeps the rest.
80% — staked
Stake $ASHAO and your share rises to 80% on every job — the stake-to-work boost.
Worker earnings settle against the same dollar-denominated value as credits — a credit is $0.01 — so a Pro message worth 10 credits pays its worker 70% (or 80% staked) of that value.
Start a browser worker
- Open Earn and click Start Worker.
- ashao downloads a small model into your browser and shows the progress. The model is cached, so subsequent starts are fast.
- Your worker registers, then begins long-polling the queue for jobs to claim.
- For each job, it streams tokens back to the user and reports the total when finished. You'll see live stats: jobs done, tokens/sec, and USD earned.
The worker loop
Conceptually, a worker is a small loop over four endpoints — register once, then claim, stream tokens, and complete for every job.
// 1. Register once.
const { workerId } = await post("/api/worker/register", {
type: "browser",
model: "Llama-3.2-1B-Instruct-q4f16_1-MLC",
});
// 2. Claim, run, report — forever.
while (running) {
const { job, messages } = await post("/api/worker/claim", {
workerId,
tier: "pro",
});
if (!job) continue; // nothing queued; poll again
let tokens = 0;
for await (const chunk of engine.chat(messages)) {
await post("/api/worker/token", { jobId: job.id, value: chunk });
tokens += 1;
}
await post("/api/worker/complete", { jobId: job.id, workerId, tokens });
}The model loads client-side, on click
Nothing downloads until you start a worker. The WebGPU model is fetched only when you opt in, and it runs entirely on your machine.Requirements
- A WebGPU-capable browser for browser workers — recent Chrome, Edge, or other Chromium builds. ashao detects support and tells you if your browser can't run a worker rather than failing silently.
- A reasonably modern GPU. The default browser model is small (around a billion parameters) so it runs on consumer hardware.
- A connected wallet to receive payouts and, optionally, to stake for the boost.
No WebGPU?
If your browser doesn't support WebGPU, the Earn page will say so and won't try to start. You can still use ashao as a user — your jobs will be served by other workers or the cloud fallback.Want to maximize payouts? Read Staking to unlock the 80% share, and How it works to see where your worker sits in the relay.