# Template catalog (/templates/catalog)



{/* AUTO-GENERATED by scripts/generate-template-docs.mjs from @alternatefutures/backend@0.1.2. Do not edit by hand. */}

<Callout type="info">
  Generated on every merge from the platform's template registry (@alternatefutures/backend 0.1.2), filtered
  to what the platform currently offers, so it matches the web app and `acc templates list`. See the
  [templates overview](/templates) for how deployment from a template works.
</Callout>

Deploy a template from the web app's **Deploy a template** page at
`https://clouds.alternatefutures.ai/deploy`, or from the CLI with its ID:

```bash
acc templates info <template-id>
acc services create --kind template --template <template-id>
```

Composite templates (several services deployed together, marked in the table)
deploy from the web app only; the CLI does not support them yet.

## All templates [#all-templates]

| Template                                                        | ID                              | Category                | Deploy from    | GPU        | vCPU | Memory | Storage |
| --------------------------------------------------------------- | ------------------------------- | ----------------------- | -------------- | ---------- | ---- | ------ | ------- |
| [GPU Instance](#gpu-instance)                                   | `gpu-instance`                  | AI and machine learning | web app or CLI | 1 × NVIDIA | 8    | 32Gi   | 10Gi    |
| [Clawd Bot (OpenClaw)](#clawd-bot-openclaw)                     | `openclaw-gateway`              | AI and machine learning | web app or CLI | no         | 1    | 2Gi    | 2Gi     |
| [Ollama GPU](#ollama-gpu)                                       | `ollama-gpu`                    | AI and machine learning | web app or CLI | 1 × NVIDIA | 4    | 16Gi   | 10Gi    |
| [Jupyter ML Workspace](#jupyter-ml-workspace)                   | `jupyter-ml-workspace`          | AI and machine learning | web app or CLI | 1 × NVIDIA | 8    | 32Gi   | 10Gi    |
| [Alternate Agent](#alternate-agent)                             | `alternate-agent`               | AI and machine learning | web app        | no         | 1    | 2Gi    | 2Gi     |
| [nanobot](#nanobot)                                             | `nanobot-gateway`               | AI and machine learning | web app or CLI | no         | 0.5  | 1Gi    | 2Gi     |
| [ComfyUI](#comfyui)                                             | `comfyui`                       | AI and machine learning | web app or CLI | 1 × NVIDIA | 4    | 16Gi   | 20Gi    |
| [Attested Server](#attested-server)                             | `attested-server`               | Game servers            | web app or CLI | no         | 1    | 2Gi    | 10Gi    |
| [Node.js Game Server](#node-js-game-server)                     | `node-ws-gameserver`            | Game servers            | web app or CLI | no         | 0.5  | 512Mi  | 1Gi     |
| [Bun Game Server](#bun-game-server)                             | `bun-ws-gameserver`             | Game servers            | web app or CLI | no         | 0.5  | 512Mi  | 1Gi     |
| [Minecraft Server](#minecraft-server)                           | `minecraft-server`              | Game servers            | web app or CLI | no         | 2    | 4Gi    | 10Gi    |
| [Alternate Chat](#alternate-chat)                               | `alternate-chat`                | Web servers             | web app or CLI | no         | 0.5  | 512Mi  | 1Gi     |
| [Hello Future](#hello-future)                                   | `hello-future`                  | Web servers             | web app or CLI | no         | 0.1  | 64Mi   | 256Mi   |
| [React + Vite](#react-vite)                                     | `react-vite`                    | Web servers             | web app or CLI | no         | 0.25 | 256Mi  | 1Gi     |
| [Hugo](#hugo)                                                   | `hugo-server`                   | Web servers             | web app or CLI | no         | 0.25 | 128Mi  | 512Mi   |
| [PostgreSQL](#postgresql)                                       | `postgres`                      | Databases               | web app or CLI | no         | 0.5  | 1Gi    | 1Gi     |
| [Redis](#redis)                                                 | `redis`                         | Databases               | web app or CLI | no         | 0.25 | 256Mi  | 1Gi     |
| [RustFS](#rustfs)                                               | `rustfs`                        | Storage                 | web app or CLI | no         | 0.5  | 1Gi    | 1Gi     |
| [Infisical](#infisical)                                         | `infisical`                     | Developer tools         | web app or CLI | no         | 1    | 1Gi    | 512Mi   |
| [n8n](#n8n)                                                     | `n8n`                           | Developer tools         | web app or CLI | no         | 0.5  | 1Gi    | 2Gi     |
| [Gitea](#gitea)                                                 | `gitea`                         | Developer tools         | web app or CLI | no         | 0.5  | 512Mi  | 2Gi     |
| [Telegram Community Bot Runner](#telegram-community-bot-runner) | `telegram-community-bot-runner` | Developer tools         | web app or CLI | no         | 0.5  | 1Gi    | 4Gi     |

## AI and machine learning [#ai-and-machine-learning]

### GPU Instance [#gpu-instance]

Linux machine with NVIDIA GPU and CUDA. Install anything: Ollama, vLLM, training frameworks, or your own stack. Connect via the web terminal or CLI.

ID `gpu-instance` · featured · tags `gpu`, `cuda`, `instance`, `vm`, `linux`, `machine-learning`, `training`

* **Deploy**: `acc services create --kind template --template gpu-instance` or from the web app.
* **Image**: `nvidia/cuda:12.8.1-devel-ubuntu24.04` · [source](https://github.com/NVIDIA/nvidia-docker)
* **Resources**: 8 vCPU, 32Gi memory, 10Gi storage, GPU 1 × NVIDIA
* **Ports**: container 8080 as 80 (public)
* **Persistent storage**: `home` 100Gi at `/root/workspace`

No environment variables to configure.

### Clawd Bot (OpenClaw) [#clawd-bot-openclaw]

Personal AI assistant gateway (OpenClaw/Clawd Bot) with Control UI, multi-provider models, channels, and optional sandboxed tools.

ID `openclaw-gateway` · featured · tags `ai`, `assistant`, `agent`, `openclaw`, `clawd`, `gateway`

* **Deploy**: `acc services create --kind template --template openclaw-gateway` or from the web app.
* [source](https://github.com/openclaw/openclaw)
* **Resources**: 1 vCPU, 2Gi memory, 2Gi storage
* **Ports**: container 18789 as 80 (public); container 18790 as 18790 (public)
* **Persistent storage**: `openclaw-state` 10Gi at `/home/node/.openclaw`

| Variable                       | Required | Default                | Description                                                                      |
| ------------------------------ | -------- | ---------------------- | -------------------------------------------------------------------------------- |
| `OPENCLAW_GATEWAY_TOKEN`       | yes      | none (secret)          | Control UI token (recommended): used to authenticate dashboard/control UI access |
| `OPENCLAW_GATEWAY_PASSWORD`    | no       | none (secret)          | Alternative to token auth: password for Control UI access                        |
| `ANTHROPIC_API_KEY`            | no       | none (secret)          | Anthropic API key for Claude models (recommended)                                |
| `OPENAI_API_KEY`               | no       | none (secret)          | OpenAI API key (optional provider)                                               |
| `GOOGLE_GENERATIVE_AI_API_KEY` | no       | none (secret)          | Google Gemini API key (optional provider)                                        |
| `CLAUDE_AI_SESSION_KEY`        | no       | none (secret)          | Claude subscription session key (advanced; optional)                             |
| `CLAUDE_WEB_SESSION_KEY`       | no       | none (secret)          | Claude web session key (advanced; optional)                                      |
| `CLAUDE_WEB_COOKIE`            | no       | none (secret)          | Claude web cookie (advanced; optional)                                           |
| `OPENCLAW_STATE_DIR`           | yes      | `/home/node/.openclaw` | Directory for OpenClaw config, agent state, and workspace                        |

### Ollama GPU [#ollama-gpu]

Run any open LLM (Llama 70B, Qwen 72B, Mistral, etc.) on GPU. OpenAI-compatible API included. Pull models on demand.

ID `ollama-gpu` · featured · tags `ai`, `llm`, `inference`, `gpu`, `ollama`, `openai`

* **Deploy**: `acc services create --kind template --template ollama-gpu` or from the web app.
* **Image**: `ollama/ollama:0.30.7` · [source](https://github.com/ollama/ollama)
* **Resources**: 4 vCPU, 16Gi memory, 10Gi storage, GPU 1 × NVIDIA
* **Ports**: container 11434 as 80 (public)
* **Persistent storage**: `ollama-models` 50Gi at `/data/models`

| Variable        | Required | Default        | Description                                         |
| --------------- | -------- | -------------- | --------------------------------------------------- |
| `OLLAMA_HOST`   | yes      | `0.0.0.0`      | Listen address (0.0.0.0 for all interfaces)         |
| `OLLAMA_MODELS` | yes      | `/data/models` | Directory for downloaded model weights (persistent) |

### Jupyter ML Workspace [#jupyter-ml-workspace]

GPU-powered Jupyter Lab with PyTorch and CUDA pre-installed. Fine-tune models, run experiments, and train on cloud GPU.

ID `jupyter-ml-workspace` · featured · tags `ai`, `ml`, `jupyter`, `pytorch`, `gpu`, `training`, `fine-tuning`

* **Deploy**: `acc services create --kind template --template jupyter-ml-workspace` or from the web app.
* **Image**: `quay.io/jupyter/pytorch-notebook:cuda12-pytorch-2.5.1` · [source](https://github.com/jupyter/docker-stacks)
* **Resources**: 8 vCPU, 32Gi memory, 10Gi storage, GPU 1 × NVIDIA
* **Ports**: container 8888 as 80 (public)
* **Persistent storage**: `jupyter-work` 100Gi at `/home/jovyan/work`

| Variable        | Required | Default       | Description                                     |
| --------------- | -------- | ------------- | ----------------------------------------------- |
| `JUPYTER_TOKEN` | yes      | none (secret) | Access token for Jupyter Lab (acts as password) |

### Alternate Agent [#alternate-agent]

AI agent with chat UI, persistent memory, autonomous goal loop, and pluggable connectors (Discord, X/Twitter). Native Supabase RAG + image/video generation through AF inference. No separate API keys: uses your AF wallet.

ID `alternate-agent` · featured · tags `ai`, `agent`, `mastra`, `autonomous`, `rag`, `supabase`, `x`, `twitter`, `social`, `chatbot`, `discord`

* **Deploy**: from the web app only. Composite template (`PostgreSQL + pgvector`, `Alternate Agent`); the CLI does not support composite templates yet.
* **Image**: `ghcr.io/alternatefutures/alternate-agent:v2` · [source](https://github.com/alternatefutures/alternate-agent)
* **Resources**: 1 vCPU, 2Gi memory, 2Gi storage
* **Ports**: container 3000 as 80 (public)
* **Persistent storage**: `agent-data` 5Gi at `/app/data`
* **Health check**: `/health` on port 3000

| Variable                  | Required | Default                           | Description                                                                                                                                                                                                                                   |
| ------------------------- | -------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AF_API_KEY`              | no       | set by the platform (`apiKey`)    | Alternate Clouds PAT: funds chat, image, and video inference.                                                                                                                                                                                 |
| `AF_ORG_ID`               | no       | set by the platform (`orgId`)     | Alternate Clouds organization ID (for billing).                                                                                                                                                                                               |
| `MODEL_NAME`              | no       | `gpt-4o-mini`                     | Chat model (e.g. gpt-4o-mini, gpt-4o, claude-sonnet-4, grok-3).                                                                                                                                                                               |
| `AGENT_NAME`              | no       | `Alternate Agent`                 | Agent display name shown in chat UI and bot identity.                                                                                                                                                                                         |
| `AGENT_INSTRUCTIONS`      | no       | `You are a helpful AI assistant.` | System prompt / personality. Use this to set tone, voice, constraints.                                                                                                                                                                        |
| `AGENT_GOAL`              | no       | none                              | Sets the agent to autonomous mode. Free-form description of what the agent should pursue every tick (e.g. "Grow @myproject on X by sharing project updates and replying to mentions, grounded in the project KB"). Leave blank for chat-only. |
| `AUTONOMOUS_INTERVAL_MIN` | no       | `30`                              | Minutes between autonomous ticks (5-1440). ±20% jitter applied.                                                                                                                                                                               |
| `SUPABASE_URL`            | no       | none                              | Your Supabase project URL (e.g. [https://xxx.supabase.co](https://xxx.supabase.co)). Enables the query\_knowledge\_base tool for RAG over your existing vector store.                                                                         |
| `SUPABASE_KEY`            | no       | none (secret)                     | Supabase service role or anon key. Service role recommended so the agent can call the RPC even if you have RLS enabled.                                                                                                                       |
| `SUPABASE_RPC_NAME`       | no       | `match_documents`                 | Name of the Supabase RPC for vector similarity search. Default matches the standard Supabase pgvector quickstart. Function signature: (query text, match\_count int) returns table(content text, similarity float).                           |
| `TWITTER_COOKIES`         | no       | none (secret)                     | X session cookies as JSON (recommended). Capture from a logged-in browser session. Survives X anti-automation far better than password login. Format: array of cookie strings or cookie objects.                                              |
| `TWITTER_USERNAME`        | no       | none                              | X handle (without @). Fallback if TWITTER\_COOKIES is not set.                                                                                                                                                                                |
| `TWITTER_PASSWORD`        | no       | none (secret)                     | X password. Triggers password login (fragile; X often challenges with captcha).                                                                                                                                                               |
| `TWITTER_EMAIL`           | no       | none                              | X account email. Sometimes required by the password login flow.                                                                                                                                                                               |
| `DISCORD_BOT_TOKEN`       | no       | none (secret)                     | Discord bot token: enables the Discord connector for chat in servers.                                                                                                                                                                         |
| `IMAGE_GEN_MODEL`         | no       | `fal-ai/flux/schnell`             | fal.ai image model path. Default is cheap & fast (\~$0.003/image). Try fal-ai/flux/dev or fal-ai/imagen3 for higher quality.                                                                                                                  |
| `VIDEO_GEN_MODEL`         | no       | `fal-ai/veo3/fast`                | fal.ai video model path. EXPENSIVE per call (\~$0.50+). Set conservative maxBudgetUsd in deployment policy to cap blast radius.                                                                                                               |
| `AUTH_TOKEN`              | no       | none (secret)                     | Optional Bearer token to protect the HTTP API at /api/\*.                                                                                                                                                                                     |

### nanobot [#nanobot]

Ultra-lightweight personal AI assistant (\~4k lines). Multi-provider (OpenRouter, Claude, GPT), CLI + chat channels (Telegram, Discord, Slack). No web UI.

ID `nanobot-gateway` · tags `ai`, `assistant`, `agent`, `nanobot`, `openclaw`, `gateway`, `lightweight`

* **Deploy**: `acc services create --kind template --template nanobot-gateway` or from the web app.
* [source](https://github.com/HKUDS/nanobot)
* **Resources**: 0.5 vCPU, 1Gi memory, 2Gi storage
* **Ports**: container 18790 as 80 (public)
* **Persistent storage**: `nanobot-state` 10Gi at `/home/nanobot/.nanobot`

| Variable                | Required | Default                     | Description                                                                                                   |
| ----------------------- | -------- | --------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `OPENROUTER_API_KEY`    | yes      | none (secret)               | OpenRouter API key (recommended: access to all models). Required: nanobot exits without at least one LLM key. |
| `ANTHROPIC_API_KEY`     | no       | none (secret)               | Anthropic API key for Claude models                                                                           |
| `OPENAI_API_KEY`        | no       | none (secret)               | OpenAI API key for GPT models                                                                                 |
| `DEEPSEEK_API_KEY`      | no       | none (secret)               | DeepSeek API key (optional)                                                                                   |
| `GROQ_API_KEY`          | no       | none (secret)               | Groq API key (optional: also enables Whisper voice transcription)                                             |
| `NANOBOT_DEFAULT_MODEL` | yes      | `anthropic/claude-opus-4-5` | Default LLM model (e.g. anthropic/claude-opus-4-5, openrouter/...)                                            |
| `NANOBOT_STATE_DIR`     | yes      | `/home/nanobot/.nanobot`    | Directory for config, workspace, and session data                                                             |

### ComfyUI [#comfyui]

Node-based Stable Diffusion UI with GPU acceleration. Build complex image generation pipelines with a visual workflow editor. Supports SD 1.5, SDXL, and Flux.

ID `comfyui` · tags `ai`, `stable-diffusion`, `image-generation`, `gpu`, `comfyui`, `generative`

* **Deploy**: `acc services create --kind template --template comfyui` or from the web app.
* **Image**: `yanwk/comfyui-boot:cu128-slim` · [source](https://github.com/comfyanonymous/ComfyUI)
* **Resources**: 4 vCPU, 16Gi memory, 20Gi storage, GPU 1 × NVIDIA
* **Ports**: container 8188 as 80 (public)
* **Persistent storage**: `comfyui-models` 50Gi at `/root/ComfyUI/models`; `comfyui-output` 10Gi at `/root/ComfyUI/output`

| Variable   | Required | Default                        | Description                    |
| ---------- | -------- | ------------------------------ | ------------------------------ |
| `CLI_ARGS` | yes      | `--listen 0.0.0.0 --port 8188` | ComfyUI command-line arguments |

## Game servers [#game-servers]

### Attested Server [#attested-server]

Your game/app image in a hard-locked Intel TDX enclave with a hardware-attested identity. No shell, no file access: nobody (not even you) can tamper with the box, and anyone can verify what it runs against Intel roots. Set your own Docker image (listening on port 80) before deploying; env vars pass through. Identity is served at the \<app>-8511 gateway domain for registry registration. Confidential compute only.

ID `attested-server` · tags `tee`, `attested`, `tdx`, `confidential`, `game-server`, `provenance`, `locked`

* **Deploy**: `acc services create --kind template --template attested-server` or from the web app.
* [source](https://github.com/alternatefutures/alternate-clouds-api/tree/main/docker/attested-identity)
* **Resources**: 1 vCPU, 2Gi memory, 10Gi storage
* **Ports**: container 80 as 80 (public)
* **Capabilities**: attested identity (confidential compute with a verifiable TDX quote); no interactive shell, by design

No environment variables to configure.

### Node.js Game Server [#nodejs-game-server]

Protocol-agnostic WebSocket relay server with room-based architecture and binary protocol (msgpack). Relays any game data between peers without inspecting payloads.

ID `node-ws-gameserver` · tags `websocket`, `multiplayer`, `realtime`, `gameserver`, `msgpack`, `node`

* **Deploy**: `acc services create --kind template --template node-ws-gameserver` or from the web app.
* **Image**: `ghcr.io/mavisakalyan/node-ws-gameserver:046edbd` · [source](https://github.com/mavisakalyan/node-ws-gameserver)
* **Resources**: 0.5 vCPU, 512Mi memory, 1Gi storage
* **Ports**: container 8080 as 80 (public)
* **Health check**: `/health` on port 8080

| Variable                  | Required | Default | Description                                               |
| ------------------------- | -------- | ------- | --------------------------------------------------------- |
| `PORT`                    | yes      | `8080`  | Server listen port                                        |
| `ALLOWED_ORIGINS`         | no       | `*`     | Comma-separated allowed origins for WebSocket connections |
| `KEEPALIVE_MS`            | no       | `30000` | WebSocket keepalive ping interval in milliseconds         |
| `MAX_MESSAGES_PER_SECOND` | no       | `60`    | Per-client rate limit (sliding window)                    |
| `MAX_PLAYERS_PER_ROOM`    | no       | `50`    | Maximum players per room                                  |

### Bun Game Server [#bun-game-server]

Bun-native WebSocket relay server: same protocol as the Node.js version but 5-8x faster. Protocol-agnostic relay with Bun built-in pub/sub for room broadcasting.

ID `bun-ws-gameserver` · tags `websocket`, `multiplayer`, `realtime`, `gameserver`, `msgpack`, `bun`

* **Deploy**: `acc services create --kind template --template bun-ws-gameserver` or from the web app.
* **Image**: `ghcr.io/mavisakalyan/bun-ws-gameserver:7ad7059` · [source](https://github.com/mavisakalyan/bun-ws-gameserver)
* **Resources**: 0.5 vCPU, 512Mi memory, 1Gi storage
* **Ports**: container 8080 as 80 (public)
* **Health check**: `/health` on port 8080

| Variable                  | Required | Default | Description                                               |
| ------------------------- | -------- | ------- | --------------------------------------------------------- |
| `PORT`                    | yes      | `8080`  | Server listen port                                        |
| `ALLOWED_ORIGINS`         | no       | `*`     | Comma-separated allowed origins for WebSocket connections |
| `KEEPALIVE_MS`            | no       | `30000` | WebSocket keepalive ping interval in milliseconds         |
| `MAX_MESSAGES_PER_SECOND` | no       | `60`    | Per-client rate limit (sliding window)                    |
| `MAX_PLAYERS_PER_ROOM`    | no       | `50`    | Maximum players per room                                  |

### Minecraft Server [#minecraft-server]

Minecraft Java Edition server with itzg's production-hardened image. Supports Vanilla, Paper, Fabric, Forge, and more. Auto-downloads server JAR on first start.

ID `minecraft-server` · tags `minecraft`, `gameserver`, `java`, `multiplayer`, `game`

* **Deploy**: `acc services create --kind template --template minecraft-server` or from the web app.
* **Image**: `itzg/minecraft-server:java21` · [source](https://github.com/itzg/docker-minecraft-server)
* **Resources**: 2 vCPU, 4Gi memory, 10Gi storage
* **Ports**: container 25565 as 25565 (public); container 25575 as 25575 (internal)
* **Persistent storage**: `minecraft-data` 20Gi at `/data`

| Variable        | Required | Default                                  | Description                                                |
| --------------- | -------- | ---------------------------------------- | ---------------------------------------------------------- |
| `EULA`          | yes      | `TRUE`                                   | Accept Minecraft EULA (must be TRUE)                       |
| `TYPE`          | yes      | `PAPER`                                  | Server type: VANILLA, PAPER, FABRIC, FORGE, BUKKIT, SPIGOT |
| `VERSION`       | yes      | `LATEST`                                 | Minecraft version (e.g. 1.21.4 or LATEST)                  |
| `MEMORY`        | yes      | `2G`                                     | JVM heap size (e.g. 2G, 4G)                                |
| `DIFFICULTY`    | no       | `normal`                                 | Game difficulty: peaceful, easy, normal, hard              |
| `MAX_PLAYERS`   | no       | `20`                                     | Maximum number of players                                  |
| `MOTD`          | no       | `A Minecraft Server on Alternate Clouds` | Message of the day shown in the server list                |
| `RCON_PASSWORD` | no       | none (secret)                            | RCON remote console password                               |

## Web servers [#web-servers]

### Alternate Chat [#alternate-chat]

End-to-end encrypted group chat where the passphrase is the room. Messages are sealed in your browser (AES-256-GCM, Argon2id keys, Ed25519-signed): the relay node only ever sees ciphertext, so no ISP, node operator, or AlternateFutures can read them. You own the deployment.

ID `alternate-chat` · featured · tags `AES-256-GCM`, `Argon2id`, `Ed25519-signed`, `chat`, `e2ee`, `encryption`, `privacy`, `websocket`, `realtime`

* **Deploy**: `acc services create --kind template --template alternate-chat` or from the web app.
* **Image**: `ghcr.io/alternatefutures/alternate-chat:v102` · [source](https://github.com/alternatefutures/alternate-chat)
* **Resources**: 0.5 vCPU, 512Mi memory, 1Gi storage
* **Ports**: container 8080 as 80 (public)
* **Persistent storage**: `data` 1Gi at `/data`
* **Health check**: `/healthz` on port 8080

| Variable                  | Required | Default | Description                                                                 |
| ------------------------- | -------- | ------- | --------------------------------------------------------------------------- |
| `PORT`                    | yes      | `8080`  | HTTP/WebSocket listen port (served behind the AF edge proxy).               |
| `DATA_DIR`                | yes      | `/data` | Directory for the SQLite database (must match the persistent volume mount). |
| `HISTORY_LIMIT`           | no       | `200`   | Most recent messages replayed to a client when it joins a room.             |
| `MAX_MESSAGES_PER_SECOND` | no       | `20`    | Per-connection publish rate limit (sliding 1s window).                      |
| `MAX_CIPHERTEXT_BYTES`    | no       | `65536` | Maximum accepted ciphertext size per message (bytes).                       |

### Hello Future [#hello-future]

A minimal static HTML page served by Nginx. Defaults to a blue "Hello Future" page; pass HTML\_CONTENT (base64-encoded HTML) to deploy your own page.

ID `hello-future` · tags `web`, `static`, `nginx`, `hello-future`, `demo`

* **Deploy**: `acc services create --kind template --template hello-future` or from the web app.
* **Image**: `nginx:1.27-alpine` · [source](https://github.com/nginx/nginx)
* **Resources**: 0.1 vCPU, 64Mi memory, 256Mi storage
* **Ports**: container 80 as 80 (public)
* **Health check**: `/` on port 80

| Variable       | Required | Default                                          | Description                                                                                                                                                                                                        |
| -------------- | -------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `HTML_CONTENT` | no       | `PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPG1ld…` | Base64-encoded HTML to serve as index.html. Use `base64 -w 0 file.html` (Linux) or `base64 -i file.html \| tr -d "\n"` (macOS): the value MUST NOT contain newlines (the GPU compute tier .env files reject them). |

### React + Vite [#react--vite]

React SPA served by Nginx. Built with Vite for fast builds and hot module replacement. Perfect for client-side rendered applications.

ID `react-vite` · tags `web`, `react`, `vite`, `spa`, `nginx`, `frontend`

* **Deploy**: `acc services create --kind template --template react-vite` or from the web app.
* **Image**: `nginx:1.27-alpine` · [source](https://github.com/vitejs/vite)
* **Resources**: 0.25 vCPU, 256Mi memory, 1Gi storage
* **Ports**: container 80 as 80 (public)
* **Health check**: `/` on port 80

| Variable     | Required | Default | Description       |
| ------------ | -------- | ------- | ----------------- |
| `NGINX_PORT` | yes      | `80`    | Nginx listen port |

### Hugo [#hugo]

Hugo static site generator served by Nginx. One of the fastest static site generators, with Markdown-driven content and theme support.

ID `hugo-server` · tags `web`, `hugo`, `static`, `blog`, `nginx`, `go`

* **Deploy**: `acc services create --kind template --template hugo-server` or from the web app.
* **Image**: `nginx:1.27-alpine` · [source](https://github.com/gohugoio/hugo)
* **Resources**: 0.25 vCPU, 128Mi memory, 512Mi storage
* **Ports**: container 80 as 80 (public)
* **Health check**: `/` on port 80

No environment variables to configure.

## Databases [#databases]

### PostgreSQL [#postgresql]

PostgreSQL 17 Alpine: lightweight, production-ready relational database with persistent storage.

ID `postgres` · tags `database`, `sql`, `postgres`, `relational`

* **Deploy**: `acc services create --kind template --template postgres` or from the web app.
* **Image**: `postgres:17-alpine` · [source](https://hub.docker.com/_/postgres)
* **Resources**: 0.5 vCPU, 1Gi memory, 1Gi storage
* **Ports**: container 5432 as 5432 (public)
* **Persistent storage**: `pgdata` 2Gi at `/var/lib/postgresql/data`
* **Capabilities**: exposes connection strings `DATABASE_URL`, `PGHOST`, `PGPORT`, `PGUSER`, `PGPASSWORD`, `PGDATABASE` to linked services

| Variable            | Required | Default                           | Description                                                           |
| ------------------- | -------- | --------------------------------- | --------------------------------------------------------------------- |
| `POSTGRES_DB`       | yes      | `appdb`                           | Default database name                                                 |
| `POSTGRES_USER`     | yes      | `postgres`                        | Database superuser name                                               |
| `POSTGRES_PASSWORD` | yes      | none (secret)                     | Database superuser password                                           |
| `PGDATA`            | yes      | `/var/lib/postgresql/data/pgdata` | PostgreSQL data directory (must be a subdirectory of the mount point) |

### Redis [#redis]

Redis 7 Alpine: in-memory data store for caching, sessions, pub/sub, and rate limiting. Optional persistent storage.

ID `redis` · tags `database`, `cache`, `redis`, `nosql`, `pubsub`

* **Deploy**: `acc services create --kind template --template redis` or from the web app.
* **Image**: `redis:7-alpine` · [source](https://hub.docker.com/_/redis)
* **Resources**: 0.25 vCPU, 256Mi memory, 1Gi storage
* **Ports**: container 6379 as 6379 (public)
* **Persistent storage**: `redisdata` 5Gi at `/data`
* **Capabilities**: exposes connection strings `REDIS_URL`, `REDIS_HOST`, `REDIS_PORT` to linked services

| Variable     | Required | Default                          | Description                       |
| ------------ | -------- | -------------------------------- | --------------------------------- |
| `REDIS_ARGS` | no       | `--save 60 1 --loglevel warning` | Additional Redis server arguments |

## Storage [#storage]

### RustFS [#rustfs]

Self-hosted, S3-compatible object storage powered by RustFS, with persistent volumes and a web console. Drops in anywhere an S3 SDK or CLI works.

ID `rustfs` · featured · tags `storage`, `s3`, `object-storage`, `bucket`, `self-hosted`, `decentralized`, `r2-compatible`, `rustfs`

* **Deploy**: `acc services create --kind template --template rustfs` or from the web app.
* **Image**: `ghcr.io/alternatefutures/rustfs:1.0.0-beta.1` · [source](https://github.com/rustfs/rustfs)
* **Resources**: 0.5 vCPU, 1Gi memory, 1Gi storage
* **Ports**: container 9001 as 80 (public); container 9000 as 9000 (public)
* **Persistent storage**: `data` 10Gi at `/data`
* **Capabilities**: exposes connection strings `AWS_ENDPOINT_URL_S3`, `S3_ENDPOINT`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_REGION`, `AWS_S3_FORCE_PATH_STYLE` to linked services

| Variable                              | Required | Default                                    | Description                                                                                                         |
| ------------------------------------- | -------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `RUSTFS_ACCESS_KEY`                   | no       | set by the platform (`generatedAccessKey`) | Root S3 access key ID (auto-generated at deploy time: visible in the deploy form, override to BYO credentials).     |
| `RUSTFS_SECRET_KEY`                   | no       | set by the platform (`generatedSecret`)    | Root S3 secret access key (auto-generated at deploy time: visible in the deploy form, override to BYO credentials). |
| `RUSTFS_OBS_LOGGER_LEVEL`             | no       | `info`                                     | Logger verbosity: error \| warn \| info \| debug \| trace                                                           |
| `RUSTFS_CORS_ALLOWED_ORIGINS`         | no       | `*`                                        | CORS allow-list for the S3 API. Use a comma-separated list of origins in production.                                |
| `RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS` | no       | `*`                                        | CORS allow-list for the web console. Use a comma-separated list of origins in production.                           |

## Developer tools [#developer-tools]

### Infisical [#infisical]

Self-hosted secrets management: open-source alternative to AWS Secrets Manager / HashiCorp Vault. Stores API keys, DB passwords, certs with end-to-end encryption.

ID `infisical` · tags `secrets`, `security`, `devtools`, `infisical`, `vault`

* **Deploy**: `acc services create --kind template --template infisical` or from the web app.
* **Image**: `infisical/infisical:v0.160.12` · [source](https://github.com/Infisical/infisical)
* **Resources**: 1 vCPU, 1Gi memory, 512Mi storage
* **Ports**: container 8080 as 80 (public)
* **Health check**: `/api/status` on port 8080

| Variable            | Required | Default                       | Description                                                                        |
| ------------------- | -------- | ----------------------------- | ---------------------------------------------------------------------------------- |
| `ENCRYPTION_KEY`    | yes      | none (secret)                 | 32-character hex (16 bytes) for AES-128-GCM. Generate with `openssl rand -hex 16`. |
| `AUTH_SECRET`       | yes      | none (secret)                 | 32+ char base64 for JWT signing. Generate with `openssl rand -base64 32`.          |
| `SMTP_PASSWORD`     | yes      | none (secret)                 | SMTP password (Resend API key recommended, format `re_...`).                       |
| `SITE_URL`          | yes      | `https://secrets.example.com` | Public URL of this deployment (used in email links).                               |
| `SMTP_HOST`         | no       | `smtp.resend.com`             | SMTP server hostname.                                                              |
| `SMTP_PORT`         | no       | `587`                         | SMTP server port.                                                                  |
| `SMTP_USERNAME`     | no       | `resend`                      | SMTP username.                                                                     |
| `SMTP_FROM_ADDRESS` | no       | `noreply@example.com`         | From address for outbound email.                                                   |
| `SMTP_FROM_NAME`    | no       | `Secrets`                     | From display name for outbound email.                                              |
| `TELEMETRY_ENABLED` | no       | `false`                       | Send anonymous usage telemetry to Infisical.                                       |

### n8n [#n8n]

Workflow automation platform: the open-source alternative to Zapier. Connect 400+ apps with a visual editor, code nodes, and AI-powered automations.

ID `n8n` · tags `automation`, `workflow`, `devtools`, `n8n`, `no-code`, `integration`

* **Deploy**: `acc services create --kind template --template n8n` or from the web app.
* **Image**: `n8nio/n8n:2.6.3` · [source](https://github.com/n8n-io/n8n)
* **Resources**: 0.5 vCPU, 1Gi memory, 2Gi storage
* **Ports**: container 5678 as 80 (public)
* **Persistent storage**: `n8n-data` 10Gi at `/home/node/.n8n`
* **Health check**: `/healthz` on port 5678

| Variable             | Required | Default       | Description                                                              |
| -------------------- | -------- | ------------- | ------------------------------------------------------------------------ |
| `N8N_HOST`           | yes      | `0.0.0.0`     | n8n server listen host                                                   |
| `N8N_PORT`           | yes      | `5678`        | n8n server listen port                                                   |
| `N8N_PROTOCOL`       | yes      | `https`       | Protocol used for webhooks (http or https)                               |
| `WEBHOOK_URL`        | yes      | none          | Public URL for incoming webhooks (set to your deployed URL)              |
| `N8N_ENCRYPTION_KEY` | yes      | none (secret) | Encryption key for stored credentials (generate a random 32-char string) |
| `GENERIC_TIMEZONE`   | no       | `UTC`         | Default timezone for scheduled workflows                                 |

### Gitea [#gitea]

Self-hosted Git service: GitHub/GitLab alternative written in Go. Lightweight, fast, and packed with features: issues, pull requests, CI/CD, packages.

ID `gitea` · tags `git`, `devtools`, `vcs`, `self-hosted`, `go`, `gitea`

* **Deploy**: `acc services create --kind template --template gitea` or from the web app.
* **Image**: `gitea/gitea:1.25-rootless` · [source](https://github.com/go-gitea/gitea)
* **Resources**: 0.5 vCPU, 512Mi memory, 2Gi storage
* **Ports**: container 3000 as 80 (public); container 2222 as 2222 (public)
* **Persistent storage**: `gitea-data` 20Gi at `/var/lib/gitea`

| Variable                      | Required | Default                 | Description                                                     |
| ----------------------------- | -------- | ----------------------- | --------------------------------------------------------------- |
| `GITEA__server__ROOT_URL`     | yes      | `http://localhost:3000` | Public URL of the Gitea instance (update to your deployed URL)  |
| `GITEA__server__HTTP_PORT`    | yes      | `3000`                  | HTTP listen port                                                |
| `GITEA__database__DB_TYPE`    | yes      | `sqlite3`               | Database type (sqlite3, postgres, mysql)                        |
| `GITEA__security__SECRET_KEY` | yes      | none (secret)           | Secret key for token signing (generate a random 64-char string) |

### Telegram Community Bot Runner [#telegram-community-bot-runner]

One-click Telegram bot runner for project communities. Add a bot token, project context, links, and guardrails; it runs 24/7 without webhooks.

ID `telegram-community-bot-runner` · tags `telegram`, `community`, `bot`, `faq`, `support`

* **Deploy**: `acc services create --kind template --template telegram-community-bot-runner` or from the web app.
* **Image**: `ghcr.io/alternatefutures/telegram-community-bot:v2`
* **Resources**: 0.5 vCPU, 1Gi memory, 4Gi storage
* **Ports**: container 3000 as 80 (public)
* **Health check**: `/` on port 3000

| Variable                | Required | Default                                          | Description                                                     |
| ----------------------- | -------- | ------------------------------------------------ | --------------------------------------------------------------- |
| `TELEGRAM_BOT_TOKEN`    | yes      | none (secret)                                    | Telegram bot token from @BotFather                              |
| `TELEGRAM_BOT_USERNAME` | no       | `telegramchatdemobot`                            | Telegram bot username (without @)                               |
| `PROJECT_NAME`          | yes      | `My Project`                                     | Project or community name the bot represents                    |
| `PROJECT_CONTEXT`       | yes      | `Describe what your project does and who it is…` | Source-of-truth project explanation used in bot replies         |
| `PROJECT_STATUS`        | no       | `Early community stage.`                         | Current status, launch stage, or availability note              |
| `PRIMARY_LINK`          | no       | none                                             | Main link to share with the community                           |
| `SECONDARY_LINK`        | no       | none                                             | Optional secondary link such as docs, app, repo, or leaderboard |
| `COMMUNITY_GOAL`        | no       | none                                             | What the community should do next or understand                 |
| `BOT_PERSONA`           | no       | `Be concise, friendly, and factual.`             | Tone and style for bot responses                                |
| `GUARDRAILS`            | no       | `Do not claim a token has launched unless the …` | Claims the bot must avoid or constraints it must follow         |
| `PORT`                  | yes      | `3000`                                           | Health endpoint port used by platform checks                    |
