Products
Workers
Heavy and long-running jobs in 15 runtimes with auto-detection, system packages and a gallery of ready-to-deploy templates.
Workers (Dashboard → project → Workers) run code that does not fit an Edge Function: long jobs, big dependencies, headless browsers, ffmpeg, JVM or .NET services. You upload source (or pick a template), we build an image on the data-plane host and run it in a gVisor-isolated container wired to your database. Types: http (public HTTPS URL), background, cron and queue (pgmq consumer). See the Edge Functions page for short serverless invocations.
Runtimes and auto-detection
Pass runtime: "auto" (or pick Detect automatically in the wizard) and we choose the runtime from your files — a pure function, covered by unit tests. Priority: Dockerfile → mix.exs → Cargo.toml → go.mod → Maven/Gradle → *.csproj → composer.json → Gemfile → Deno → Node/Bun → Python. A Python app with a frontend package.json stays Python when it has main.py/app.py and no start script.
| Runtime | Detected from | Install / build | Start |
|---|---|---|---|
python3.11 / 3.12 / 3.13 | requirements.txt, pyproject.toml, Pipfile, *.py | uv pip install (fast installs) | main.py · uvicorn / gunicorn when present · Procfile |
node20 / node22 / node24 | package.json (engines.node) | npm ci / pnpm / yarn, npm run build, prune | npm start · index.js · server.js |
bun | bun.lock, bunfig.toml, packageManager | bun install | bun run index.ts |
deno2 | deno.json, deno.lock | deno cache | deno task start · deno run -A main.ts |
go1.22 – go1.25 | go.mod (go directive) | go build (static, multi-stage, cmd/*) | /app/server |
rust | Cargo.toml | cargo build --release (multi-stage, cached registry) | /app/server |
java21 | pom.xml, build.gradle(.kts) | Maven or Gradle → fat JAR → JRE 21 | java -jar app.jar (-Dserver.port=$PORT) |
dotnet8 / dotnet9 | *.csproj, *.sln | dotnet publish (multi-stage) | dotnet <project>.dll (ASPNETCORE_URLS) |
php8.3 | composer.json | composer install on FrankenPHP (Laravel, Symfony, Octane) | Caddy php_server on $PORT |
ruby3.3 | Gemfile, config.ru | bundle install (deployment) | puma on $PORT (Rails, Sinatra, Rack) |
elixir | mix.exs | mix release (multi-stage) | bin/<app> start |
dockerfile | Dockerfile | your own build (uid 10001, read-only rootfs) | your CMD |
A Procfile (web: … for http workers, worker: … otherwise) or the command field overrides the start command. Containers run as uid 10001 with a read-only root filesystem; /tmp (128 MB) is writable and HOME=/tmp. The presets already redirect framework caches (Rails tmp/ and log/, Laravel storage/, Deno, npm, uv) there. The port comes from $PORT.
System packages
List whitelisted packages in the wizard, in worker.json ("packages": ["ffmpeg","chromium"]), in the API (packages) or in an Aptfile next to your code. Allowed: ffmpeg, chromium, tesseract, poppler, imagemagick, ghostscript, pandoc, libreoffice, wkhtmltopdf, weasyprint, fonts, libvips, opencv, graphviz, git, curl, jq, unzip, sqlite, postgresql-client, libpq, build-tools. Common Python dependencies are detected automatically: weasyprint, pytesseract, ffmpeg-python, pdf2image, opencv-python, psycopg2. When playwright is in requirements.txt or package.json, the build also runs playwright install --with-deps chromium.
Template gallery
35 ready-to-deploy workers with working code, documented environment variables and the Supabase features they use (database, Auth, Storage, pgmq queues, Realtime, AI Gateway, Email, pgvector). Open Workers → Template gallery, filter by language, category or Supabase feature and press Deploy: templates without required secrets deploy immediately, others open the wizard pre-filled (with optional setup SQL such as tables and queues).
The same catalogue is available from the terminal and over MCP:
hostbase workers templates # list (filters: --language Python --category ai)
hostbase workers init --template stripe-webhook # writes workers/stripe-webhook/ + worker.json + .env.example
hostbase workers deploy stripe-webhook # builds and rolls out
hostbase workers deploy-template ocr-tesseract --name ocr # one command, no local files
GET /api/v1/worker-templates?q=ocr&language=Python
GET /api/v1/worker-templates/{id} # includes source files
POST /api/v1/projects/{ref}/workers/from-template # { template, name?, env?, size?, run_setup_sql? }
MCP tools: list_worker_templates and deploy_worker_template; deploy_worker accepts runtime: "auto" and packages.
All templates
fastapi— FastAPI (HTTP) (Python, http)pgmq-consumer— Konsument kolejki pgmq (Python) (Python, queue)node-cron— Zadanie cron (Node.js) (Node.js, cron)go-http— Serwer HTTP (Go) (Go, http)bun-http— Serwer HTTP (Bun) (Bun, http)cron-backup-s3— Backup bazy do S3 (cron) (Python, cron)csv-excel-import— Import CSV/Excel do Postgresa (FastAPI) (Python, http)data-sync-api— Synchronizacja z zewnętrznym API (cron) (Python, cron)deno-oak-api— API Oak (Deno 2) (Deno, http)discord-bot— Bot Discord (discord.js) (Node.js, background)dotnet-minimal-api— API CRUD (.NET 9 Minimal API) (.NET, http)elixir-plug-api— API (Elixir, Plug + Bandit) (Elixir, http)email-digest— Dzienny digest e-mail (cron) (Python, cron)embeddings-worker— Worker embeddingów (pgmq + pgvector) (Python, queue)fastapi-supabase-crud— API CRUD (FastAPI) (Python, http)flask-webhook-receiver— Odbiornik webhooków (Flask) (Python, http)go-grpc-service— Usługa gRPC (Go) (Go, http)hono-bun-api— API Hono (Bun) (Bun, http)langgraph-agent— Agent LangGraph (FastAPI) (Python, http)laravel-api— API CRUD (Laravel 12) (PHP, http)media-ffmpeg-pillow— Miniatury i transkodowanie (ffmpeg + Pillow) (Python, http)nestjs-api— API NestJS (TypeScript) (Node.js, http)ocr-tesseract— OCR (Tesseract) (Python, http)pdf-weasyprint— Generator PDF (WeasyPrint) (Python, http)pgmq-tasks— Zadania w tle na pgmq (Celery-like) (Python, queue)rag-api— RAG API (FastAPI + pgvector) (Python, http)rails-api— API CRUD (Rails 7.2) (Ruby, http)report-to-storage— Raport tygodniowy do Storage (cron) (Python, cron)rust-axum-api— API CRUD (Rust, Axum) (Rust, http)scraper-playwright— Scraper stron (Playwright) (Python, http)slack-bot— Bot Slack (Socket Mode) (Node.js, background)spring-boot-api— API CRUD (Spring Boot) (Java, http)stripe-webhook— Webhook Stripe (FastAPI) (Python, http)telegram-bot— Bot Telegram (long polling) (Python, background)websocket-server— Serwer WebSocket (ws) (Node.js, http)
Build times
One build at a time per host; times include pulling base images on a cold cache and dependency downloads (measured on the data-plane VM at load average 17–23 while other builds and customer databases were running; builds are capped at 2 CPU / 2 GB). Rebuilds reuse layers and the Cargo / Maven / NuGet caches.
| Template | Runtime | Build time | Image | Notes |
|---|---|---|---|---|
hono-bun-api | bun | 11 s | 331 MB | bun install |
fastapi-supabase-crud | python3.12 | 15 s | 297 MB | uv pip install |
deno-oak-api | deno2 | 25 s | 290 MB | deno cache |
pdf-weasyprint | python3.12 | 55 s | 480 MB | + apt: Pango, fonts |
dotnet-minimal-api | dotnet9 | 62 s | 331 MB | dotnet publish |
spring-boot-api | java21 | 75 s | 515 MB | Maven → fat JAR → JRE |
ocr-tesseract | python3.12 | 77 s | 478 MB | + apt: tesseract (pol, eng), poppler |
nestjs-api | node22 | 115 s | 629 MB | npm install + nest build + prune |
go-grpc-service | go1.24 | 147 s | 37 MB | static binary on Alpine |
scraper-playwright | python3.12 | 170 s | 2.1 GB | playwright install --with-deps chromium |
laravel-api | php8.3 | 187 s | 1.0 GB | composer install on FrankenPHP (cold) |
elixir-plug-api | elixir | 211 s | 587 MB | mix release |
rails-api | ruby3.3 | 211 s | 401 MB | bundle install (multi-stage) |
rust-axum-api | rust | 284 s | 135 MB | cargo build --release, ~250 crates; 28 s after a code change (dependencies are a cached layer) |
Usage and billing
Workers are billed per replica-hour of runtime, expressed in Small-equivalent hours (Small = 1, Medium = 2, Large = 8). Paid plans include a monthly allowance (Pro: 750 h). Settings → Usage shows a Workers panel with the last 7 days and the plan allowance; the organization usage page shows the monthly total and overage.