Skip to main content
Use InsForge Custom Compute to run long-lived containers next to your project: queue workers, background processors, AI inference loops, websocket servers, scrapers, anything that needs to stay up.
Just need to handle a request? Use Edge Functions for request/response work and short jobs. Custom Compute is for processes that need to run continuously.

Features

Container deploys

Push any Docker image to InsForge and it runs. Point at a pre-built image on a registry, or upload a build context and let InsForge build it from your Dockerfile. No proprietary build pipeline to learn.

Reaching your project

Set the credentials your container needs as environment variables on the service — the project URL, an API key, S3 credentials, whatever the workload uses. Nothing is injected for you, so you decide exactly what the container can reach. When you self-host, compute containers join your project’s own network by default, so postgres:5432 and postgrest:3000 resolve by name from inside the container exactly as they do for edge functions — no public round trip.

Resources

Memory and CPU are configurable per service. Each service runs one instance; run several services if you need several workers.

Logs

Structured logs per container, queryable by service and time range. Tail in the dashboard, CLI, or MCP without kubectl exec-ing into anything.

Secrets and env vars

Set environment variables and secrets per service, separately from your edge-function secrets. Rotate without redeploying.
No persistent volumes yet. Container state survives restarts and host reboots, but changing the image, environment variables, or port recreates the container and discards anything written inside it. Use your project’s Postgres or Storage for data you need to keep.

Self-hosting: enable compute

On InsForge Cloud, compute is fully managed and you configure nothing. When you self-host, you choose where containers run. Two providers are available, and until one is configured the compute endpoints return 503 COMPUTE_NOT_CONFIGURED.
Containers run on the same Docker daemon that runs InsForge, as siblings of the InsForge container. Nothing to sign up for, and no per-container bill.Enabling it is a single deliberate act: mount the Docker socket into the InsForge container. In your compose file, uncomment the line that is already there for this:
That is the whole edit. The socket is mode 660 root:docker on Linux and root:root on Docker Desktop, and the group id differs per host, so the container reads it off the socket at startup and joins that group before dropping to the app user. Nothing to look up and nothing to set.Restart the stack. The driver registers itself when the socket is reachable and logs Compute provider "docker" ready.
The Docker socket is root-equivalent on the host. Anyone who can reach it can start a container that reads the whole filesystem, so mounting it is a decision to make deliberately. InsForge builds every container spec itself and never forwards caller-supplied options, so a leaked InsForge API key cannot ask for a privileged container or a host bind mount — but the socket itself remains as powerful as the account that owns it.
Optional settings:
If both are configured, existing services stay with the provider that created them and new ones go to Fly. Set COMPUTE_PROVIDER to fly, docker, or off to be explicit.

Choosing how a service is reachable

Each service picks an ingress mode. Which modes exist depends on the provider, and so does the default: on a single host it is none, because most compute — queue workers, processors, inference loops — takes no inbound traffic at all, while Fly gives every app a hostname and so offers only host. Omit the field and the active provider’s default applies; ask for a mode the provider cannot give and it is coerced to one it can. Published ports bind to 127.0.0.1 by default. Set COMPUTE_BIND_ADDRESS to change that — Docker’s own default publishes on every interface, including IPv6, which would put your container on the public internet on a reachable host. Set the deployment-wide default with COMPUTE_DEFAULT_INGRESS. For host mode, InsForge advertises the hostname but does not terminate TLS or route traffic — run your own gateway (Caddy, Traefik, nginx) in front, as you already do for the dashboard.

Building from source

Deploying a pre-built image needs nothing special: create the service with an image reference and it is pulled and started. To have InsForge build your Dockerfile, reserve the service, then upload the build context as a tarball:
Add ?dockerfile=docker/Dockerfile if your Dockerfile is not at the context root; the path must stay inside the context. One build runs at a time — a second upload gets 429 rather than being buffered. On macOS, tar with --no-xattrs (or COPYFILE_DISABLE=1): extended attributes that the Linux daemon cannot apply will make it reject the whole context.

Platform support

What differs between providers

Ask GET /api/metadata for the compute slice — it reports the configured providers and what each one can do, so tools can stop offering options that would be ignored.

Next steps

  • Set up the CLI to link your project (the recommended path).
  • See Edge Functions if request/response is all you need.