Functions
One handler, one trigger. No container, no scaling config. The mesh handles cold start, hot path, scale-out, and tear-down. Billed in joules per invocation — an idle function literally costs nothing.
A function
// hello.js — exported as the default handler
export default async function (req) {
const body = await req.json();
return new Response(JSON.stringify({ hello: body.name }), {
headers: { "content-type": "application/json" },
});
}
Deploying
invisible fn deploy hello.js --route /hello --runtime node-22 --memory 256MB
Live in a few seconds at https://<account>.fn.greenjoules.cloud/hello. Or attach a custom domain via the route block.
Runtimes
| Runtime | Notes |
|---|---|
| node-22, node-20 | V8 isolate, sub-10ms cold start |
| python-3.13, python-3.12 | Standalone CPython, ~150ms cold start |
| rust-stable | WASM-compiled, ~5ms cold start |
| deno-2 | Native Deno runtime with full standard library |
| bun-1 | Native Bun runtime, fastest for HTTP-bound work |
| wasi-preview-2 | Bring your own .wasm |
Triggers
- HTTP — the default; one function per route
- Cron —
--cron "0 * * * *" - Object Store events —
--on bucket/jc-uploads/object-created - Queue —
--on queue/jobs
Energy & billing
Cold start joules + execution joules + waiting-on-IO joules (which are tiny, because the runtime is suspended). Each invocation produces a receipt with energy.cold_start_j and energy.execution_j as separate fields so you can see what your function actually costs.
Limits at launch
- 30s max execution per HTTP invocation; 15min for cron / event triggers
- Memory: 128 MB – 4 GB
- Up to 1000 functions per account
- Per-function concurrency cap configurable; defaults to 1000 simultaneous
Compared to Lambda / Cloud Functions / Cloudflare Workers
Joule-billed instead of GB-second-billed, no per-region deploys (one deploy, the mesh places it), and the cold-start cost shows up on the receipt instead of being invisible. For request-heavy edge work, very competitive on price. For long-running batch work, prefer Compute.