← all wireframes

Docs · /docs

v17 · sidebar nav + welcome content + most read
v17
DESKTOP · 1440px · docs landing / welcome
floom.dev/docs
Docs / Welcome

Floom docs.

The protocol and runtime for agentic work. Write a manifest, ship an app, let users (or agents) run it.

Install in 60 seconds

Floom ships as a small CLI (Go, one static binary) and an optional local runtime (Docker). You need either curl or brew. No Node.

# macOS / Linux $ curl -fsSL https://floom.dev/install.sh | sh # or via homebrew $ brew install floom # verify $ floom --version floom 0.8.0 (2026-04-22)

Run your first app

Every Floom app is a manifest + code. You can run one from the store without installing anything: paste a JSON input, get JSON back.

# run lead-scorer from the store floom run lead-scorer --input '{"company":"stripe.com"}' # or via HTTP curl -X POST https://api.floom.dev/v1/runs \ -H "Authorization: Bearer $FLOOM_KEY" \ -d '{"app":"lead-scorer","input":{"company":"stripe.com"}}'

Most read

What Floom is (and what it isn't)

Floom is for internal tools, productivity apps, and weekend-project apps that do real work: score leads, screen resumes, analyse competitors, classify webhooks. Think 3 to 50 steps per run, JSON in, bearer or API-key auth, done in seconds to a few minutes.

It is not a workflow builder like n8n, it is not a frontend generator like Lovable, it is not a model playground like Hugging Face Spaces. It is the thin, opinionated layer between your app idea and a running endpoint.

Install in Claude, Cursor, Codex — via MCP

Every Floom app is a ready-to-use MCP tool at mcp.floom.dev/app/<slug>. Point your agent at that URL and it can call the app like any other tool. There’s also a discovery endpoint so agents can find apps on their own, and a web Studio for managing the apps you own.

Discover
Find apps

JSON list of live apps with manifests. Read-only, no auth. Great for agents that pick a tool at runtime.

mcp.floom.dev/search
Run
Run an app

One MCP endpoint per app. Invoke with JSON input, get structured JSON + a run URL back.

mcp.floom.dev/app/<slug>
Manage
Your apps

Create, update, redeploy, rotate secrets. Web UI, not an MCP endpoint — sign in with your Floom account.

floom.dev/studio

Most users wire up /search + one or two /app/<slug> endpoints (zero auth required for public apps) and use the web Studio for everything else.

Claude Desktop

Open ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and paste:

// discover + one app wired up { "mcpServers": { "floom-search": { "url": "https://mcp.floom.dev/search" }, "floom-lead-scorer": { "url": "https://mcp.floom.dev/app/lead-scorer" }, "floom-resume-screener": { "url": "https://mcp.floom.dev/app/resume-screener", "headers": { "Authorization": "Bearer flm_live_..." } } } }

Quit and reopen Claude. Ask "What Floom apps exist for lead scoring?" — Claude calls search, then hits app/lead-scorer on the one you pick. Add the Authorization header only on apps that require a key (private apps or ones that charge).

Cursor

Cursor reads ~/.cursor/mcp.json. Same shape as Claude Desktop. Reload Cursor after editing.

# ~/.cursor/mcp.json { "mcpServers": { "floom-lead-scorer": { "url": "https://mcp.floom.dev/app/lead-scorer" } } }

Codex CLI / other MCP clients

Codex CLI supports MCP via ~/.codex/mcp.json (same schema). Any MCP-compliant client works: VS Code Continue, Zed, OpenAI ChatGPT’s MCP bridge. The endpoint URL is always https://mcp.floom.dev/app/<slug> for a specific app, or https://mcp.floom.dev/search to let the agent discover apps on its own.

# ~/.codex/mcp.json { "mcpServers": { "floom-search": { "url": "https://mcp.floom.dev/search" }, "floom-competitor": { "url": "https://mcp.floom.dev/app/competitor-analyzer" } } }

For a per-app install flow (single app, one JSON block), every app page has an Install in Claude button that pre-fills the config with that app’s MCP URL.

Self-host Floom

The core runtime is MIT-licensed and ships as a single Docker image. Live reference instance: docker.floom.dev.

One command

# pulls from Docker Hub, persists data in a named volume docker run -d -p 3000:3000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v floom-data:/data \ -e AUTH_PASSWORD=your-secret-password \ floomhq/floom-docker:latest

Open http://localhost:3000, log in with the password, deploy your first app from the dashboard or the marketplace. Every run executes in an isolated container; no host access.

Or via docker-compose

# clone, set password, boot git clone https://github.com/floomhq/floom-docker.git cd floom-docker echo "AUTH_PASSWORD=your-secret" > .env docker compose up -d

Key environment variables

VariableDefaultWhat it does
AUTH_PASSWORDrequiredShared password for the sign-in page. Server refuses to start without this.
HOST_PORT3000Host port to publish. Container always listens on 3000 internally.
HOST_BIND127.0.0.1Listen on localhost by default. Set 0.0.0.0 only behind a reverse proxy.
RUNNER_MEMORY512mMemory cap per app run container.
RUNNER_CPUS1CPU quota per app run container.
RUNNER_TIMEOUT300000Max run duration in ms (5 min default). Run is killed past this.
BUILD_TIMEOUT600000Max build duration in ms (10 min default) for first deploy.
GEMINI_API_KEYoptionalEnables cross-document knowledge synthesis. Not required for app runs.
Source: /opt/floom-docker/docker-compose.yml (2026-04-22)

Update & rollback

# update to latest image docker pull floomhq/floom-docker:latest docker compose up -d # rollback: pin to a previous tag docker compose up -d floomhq/floom-docker:2026.04.21

Data lives in the floom-data volume (SQLite in WAL mode, no external deps). Backups: docker run --rm -v floom-data:/data alpine tar czf - /data > backup.tgz.

Runtime specs

What a single app run can do on the hosted Floom Cloud. Self-host has the same defaults but is fully configurable.

ResourceLimitNotes
Memory per run512 MBContainer RSS cap. Hit = container killed with OOM.
CPU per run1 vCPUDocker --cpus=1 equivalent. Bursty allowed.
Max run duration5 minKills the container past 300s. Long jobs: use the job-queue renderer (phase 2).
Max input size10 MBJSON body + uploaded files combined. File uploads: parse_to: "json" or "text" runs before your code sees it.
Max output size5 MBJSON response + artifacts. Larger = upload to storage, return a URL.
Max file upload (Cloud)10 MBMatches max input. Self-host: unlimited (operator's disk).
Build timeout (first deploy)10 minIncludes dependency install + container build.
NetworkbridgeOutbound yes. No inbound, no host access, no sibling containers.

Rate limits

ScopeLimitNotes
Anon IP per app5 / 24hLaunch default. Then BYOK modal: paste your Gemini key for unlimited.
Public permalink10 / hourPer IP, across all apps. Stops light scraping.
With BYOKunlimitedFloom doesn’t cap; your provider does.
Self-hostunlimitedNo limits enforced by Floom. Set your own in front of the container.
Source: test/stress/test-byok-gate.mjs, floom-docker/README.md

Concurrent runs per account

TierConcurrentNotes
Free (Floom’s key)1One run at a time. Queue the next. Keeps the shared Gemini key fair.
BYOK3Three parallel runs per account once your own key is attached.
Self-hostunlimitedBounded only by your host’s CPU / memory and Docker’s container cap.
Locked 2026-04-22.

TBD · streaming output: websocket / SSE output size cap is not yet locked. Everything else on this page (memory, CPU, timeout, input/output, file upload, concurrency) is confirmed for launch.

Stuck? Ask in Discord.

Most questions get an answer within a few hours from the Floom team or a contributor.

v17 notes