Queue consumers
BullMQ, Celery, Sidekiq, RQ, Resque or your own loop over a queue. The worker sits waiting for jobs and picks them up as your web service pushes them in. Most spend their time idle and are comfortable on the free size.
A background worker runs continuously with no web port and no public URL - queue consumers, job processors and bots.
Free size included · Paid sizes from ₹298/mo
If it has to keep running and nothing needs to reach it over HTTP, it belongs here.
BullMQ, Celery, Sidekiq, RQ, Resque or your own loop over a queue. The worker sits waiting for jobs and picks them up as your web service pushes them in. Most spend their time idle and are comfortable on the free size.
A Kafka or Redis Streams consumer, a change-data reader, a webhook drainer. The process holds its position and keeps reading, and Voroa starts it again if the machine underneath it restarts.
Code that wakes on its own timer - syncing an external API, refreshing a cache, checking something every few minutes. If it should instead run and finish on a schedule, a cron job is the better fit - see worker or cron job.
A Telegram, WhatsApp, Discord or Slack bot, a WebSocket client, an MQTT subscriber. These need to stay connected rather than answer requests, which is exactly what a worker is for.
A web service listens on a port and has a URL. A worker does not - it answers no HTTP requests, so there is no address to give out and nothing to point a domain at.
Two consequences worth knowing before you choose:
node worker.js, python worker.py, npm run worker, or whatever launches your process.Connect a repository, pick a branch, and Voroa builds and runs your app. Most projects need zero configuration. When you do need control, set your own build and start commands, root directory and Node version - and change them any time.
View documentationTurn on auto-deploy and every push to your branch triggers a fresh build and rolls the change out. Your live service always matches your latest commit, and every deploy is recorded with the commit that caused it.
View documentationStore the configuration your app needs as environment variables, applied to both your builds and your running service. Values are encrypted at rest and are never displayed again - not to you, not to anyone. You can replace a value; nobody can read it back.
View documentationYour build streams line by line as it runs, and your running service keeps its own runtime logs - so when something misbehaves in production you read what happened instead of guessing. Every deploy keeps its status and its commit.
View documentationA background worker costs exactly the same as a web service of the same size - the same size list, rung for rung, same memory and same CPU at the same price. You never have to work out which of the two is cheaper for the work you are running.
There is a free size, and it is the same free size a web service gets. Most workers are comfortable on it: a consumer that spends its time waiting usually holds well under 100 MB. Start there, watch the Metrics tab, and move up only when that number tells you to.
A free-plan account runs one background worker. Cron jobs share that count, so it is one or the other, and the count is per account rather than per workspace. Growth raises it to five and Scale to twenty-five - see the workspace plans.
Start free, move up a size when the service needs it. Every size is billed per service, per month.
| Plan | CPU / RAM / Storage | Price | Action |
|---|---|---|---|
Nanoworker_free |
0.1 CPU · 512 MB RAM | ₹0/month+18% GST | Get started |
Starterworker_starter |
1 CPU · 1 GB RAM | ₹298/month+18% GST | Get started |
Standardworker_standard |
1 CPU · 2 GB RAM | ₹498/month+18% GST | Get started |
Standard Plusworker_standard_plus |
2 CPU · 2 GB RAM | ₹598/month+18% GST | Get started |
Proworker_pro |
2 CPU · 4 GB RAM | ₹998/month+18% GST | Get started |
Pro Plusworker_pro_plus |
4 CPU · 4 GB RAM | ₹1,198/month+18% GST | Get started |
Pro Maxworker_pro_max |
4 CPU · 8 GB RAM | ₹1,998/month+18% GST | Get started |
Pro Ultraworker_pro_ultra |
8 CPU · 8 GB RAM | ₹2,398/month+18% GST | Get started |
Scaleworker_scale |
8 CPU · 16 GB RAM | CustomPriced to your workload | Talk to us |
Scale Maxworker_scale_max |
8 CPU · 24 GB RAM | CustomPriced to your workload | Talk to us |
Your bill is one workspace plan plus a compute size for each service you run; the pricing page lists the workspace plans. All prices in INR and exclude 18% GST; a GST tax invoice is issued on every payment. No foreign currency payments, no forex markup.
Create your Voroa account. Email and a password, or sign in with GitHub.
Choose New, then Background Worker, and pick your repository and branch.
Set the root directory if your worker lives in a subfolder. It is case-sensitive.
Enter the start command that launches your process.
Pick a size. The free one costs nothing and needs no card.
Create. Voroa builds your code and starts the worker, and every later push is a new release.
There is no port to knock on, so Voroa reads the process itself. After the build, the worker shows Starting, and only becomes Live once the process has stayed up for a full minute.
That wait is deliberate. A worker that dies after ten seconds looks exactly like a healthy one for the first few seconds. Waiting long enough for the difference to show means a worker that cannot start is reported as Failed to start rather than as a success you find out about later.
Voroa keeps watching after the deploy is over, too. A worker that is stopping and restarting says so on the service itself, and in most cases we also email whoever the service belongs to - about one a day while it lasts, not one per restart.
If it still cannot stay up a day later, we stop it rather than let it burn a size for nothing. Nothing is deleted and you can start it again yourself once the cause is fixed.
View documentationYour workers and every service and database beside them land on a single monthly invoice, paid over UPI-Autopay or an Indian card. Each line names what it is for, and the tax is split out the way your accountant needs it for input tax credit.
View documentationA long-running process with no web port. It does not serve HTTP and has no URL - it just keeps running, usually waiting on a queue, reading a stream, or holding a connection open. Work arrives from somewhere else, such as your web service adding a job to a queue.
Yes. A web service has a server Voroa can detect; a worker has nothing to detect, so the command that starts your process is required. With the Docker runtime it is optional - your image's CMD runs unless you override it.
No, and that is the point. Nothing reaches a worker over HTTP, so there is no address and no domain to attach. If you need one, you want a web service instead.
No. A worker runs around the clock and is never idle-stopped, because being quiet is a normal state for a queue consumer rather than a sign that nobody needs it.
The same as a web service of the same size, rung for rung. There is a free size that needs no card. Paid sizes bill monthly in rupees, prices exclude GST, and your first charge is prorated and shown to you before you pay.
The difference is whether your code is expected to stop. A worker should still be running tomorrow. A cron job runs, finishes, and waits for its next scheduled time. Finishing is normal for a cron job and a fault for a worker - the full comparison walks through both.
Almost always because the program finishes instead of staying running. Voroa restarts a worker that stops, so a script that does its work and ends gets started again immediately. That code wants to be a cron job. The other two causes are a start command that cannot run, and something the code needs being installed at start-up instead of during the build.
Yes. Choose the Docker runtime and Voroa builds from the Dockerfile in your repository, so any system tooling your job needs - a database client, a cloud CLI, image libraries - is there when it runs. Set the Dockerfile path if it is not at the repository root.
Yes. Add a scheduled task to the worker and it runs inside the worker's own running container on the schedule you set.
In Mumbai (IN). Billing is in rupees, and every charge comes with a GST invoice you can hand to your accountant.
Connect a repository, give it a start command, and pick the free size. Move up a size when the queue gets long enough to need it.
Free size, no card needed.