A self-hosted platform for the apps your coding agent builds.
133
Website: GenHTTP Lambda Community
Coding agents such as Claude Code, Codex and Cursor can write a small web app in minutes. Deploying it usually takes far longer: a container, a port, a reverse proxy entry, a database and backups, repeated for every new app. GenHTTP Lambda gives these apps a single home on your own server. Once your agent is connected, every app it builds is online at its own address within seconds, with a database, a version history and rollback. You operate one container.
docker run -d -p 8080:8080 -v lambda-data:/data -e LAMBDA_ADMIN_TOKEN=secure-password genhttp/lambda
Then open http://localhost:8080.
GenHTTP Lambda is designed for small apps that often go unhosted because deploying them takes more effort than writing them:
A request such as "Build a shared task list for the team" produces an app that is online. A follow-up such as "Give every task the day it is due" is tested in a draft before it goes live.
/lambda/ on your server or at a subdomain of its own,
and a custom domain once the app is made premium in the panel.main saves a
version, and pushing a branch starts a draft.Under the hood, every app is a small C# program, a [GenHTTP][genhttp] handler, which the server compiles and starts within seconds. Writing one by hand is optional:
return Inline.Create()
.Get(() => "Hello from my app!");
docker run -d --name lambda -p 8080:8080 -v lambda-data:/data \
-e LAMBDA_PUBLIC_URL=https://lambda.example.com \
-e LAMBDA_ADMIN_TOKEN=a-long-password \
genhttp/lambda
/data.LAMBDA_PUBLIC_URL is the address at which you and your agents reach
the server, and the apps' addresses are derived from it. If it is not set,
the server answers at any host name and the addresses use
http://localhost:8080.LAMBDA_ADMIN_TOKEN is the password for the administration panel at
/admin. If it is not set, the panel is disabled.The sample in samples/community provides the same setup with Docker Compose and can optionally include the build agent:
cd samples/community
cp .env.example .env # set at least LAMBDA_ADMIN_TOKEN
docker compose up -d
| Variable | Description |
|---|---|
LAMBDA_PUBLIC_URL | The address at which people and agents reach the installation, such as https://lambda.example.com - a host name or an IPv4 address. The apps' addresses are derived from it, and once it is set the server answers only at that name and at localhost. If it is not set, the server answers at any name and the addresses use http://localhost:8080. |
LAMBDA_ADMIN_TOKEN | The password for the administration panel at /admin. If it is not set, the panel is disabled. |
LAMBDA_HOSTING_URL | A domain for the apps, such as https://apps.example.com. Each app then answers at its own subdomain (https://my-app.apps.example.com/) instead of below /lambda/. Requires a wildcard DNS record and a wildcard certificate. |
LAMBDA_CONTACT | An email address the pages offer for questions, such as requests for premium. |
LAMBDA_ABUSE_CONTACT | An email address the pages offer for reporting a harmful app. |
LAMBDA_AGENT_URL, LAMBDA_AGENT_TOKEN | The address of the build agent and the secret shared with it (see below). |
Further settings, covering limits, logging, TLS and analytics, are described in the reference.
The image serves plain HTTP on port 8080. Place it behind your existing
reverse proxy, such as Caddy, nginx or Traefik, with a single entry for the
whole server, and set LAMBDA_PUBLIC_URL to the https:// address. The
server can also serve TLS itself; the reference describes how.
The installation stores all of its data in the volume at /data: its
database, every version of every app, the apps' records and files, their git
history, and secrets.key, the key the apps' secrets are encrypted with. Back
up the entire volume, including secrets.key. Without that file, the stored
secrets cannot be decrypted.
docker pull genhttp/lambda
docker compose up -d # or: docker rm -f lambda, then run it again
The database is migrated when the server starts. Apps and their data are left unchanged.
The front page explains how to connect each agent. For Claude Code, a single command is sufficient:
claude mcp add --transport http genhttp http://localhost:8080/mcp
Other agents can add a remote MCP server at http://localhost:8080/mcp (the
value of LAMBDA_PUBLIC_URL followed by /mcp).
You can then describe what you need, for example "Build a guestbook, with a page where I approve the entries." The agent creates the app, publishes it and returns its address and its editor link. Store the editor link safely: it grants full control over the app and cannot be recovered.
Agents that can make HTTP requests or use git can work that way instead: the
REST API is documented at /api/v1/scalar/, and each app's git address is
shown in its editor.
With the build agent enabled, the front page offers an input box: people describe the app they want, and an agent on your server writes it, publishes it and returns a link for changing it. No coding agent of their own is required. The build agent is optional and is the only part of the setup that runs outside the main container. It requires:
claude setup-token;In samples/community/.env, set CLAUDE_CODE_OAUTH_TOKEN, a random
LAMBDA_AGENT_TOKEN (openssl rand -hex 32), LAMBDA_AGENT_URL=http://agent:8401
and DOCKER_GID (getent group docker | cut -d: -f3), then start it:
docker compose --profile agent up -d
/lambda/, an app runs on the
same origin as the editor and the administration panel, so its pages could
read what those store in your browser. The editor does not send its address
to apps, and the panel keeps its password for the current tab only, but this
setup is intended for apps built by you and your team. To host apps for
people you do not know, give the installation a separate domain for them
(LAMBDA_HOSTING_URL); each app is then a site of its own.Content type
Image
Digest
sha256:c79d9701d…
Size
204.6 MB
Last updated
1 day ago
docker pull genhttp/lambda