← backSelf-hosting
Fully optional. Install and iframer runs local, in-process, zero config, no Docker needed. This page is for the one thing Docker adds: docker-headful.
Why self-host
headless and binary-headful always run directly on the host, Docker or not. Self-hosting with Docker adds docker-headful, which exists for two reasons:
- —Real, headful rendering with no desktop needed. The container renders into a virtual display (Xvfb), so you get an actual human-shaped browser page even on a headless Linux server or CI box with no screen at all, something binary-headful can't do since it needs a real desktop to open a window on.
- —Better odds against bot-detection and captchas, while staying invisible. A real rendered page passes checks a headless one can trip, and it does that without a window popping up on your desktop. Watch it live over noVNC if the vision solver needs a hand or you just want to see what's happening.
- —One browser pool, shared across multiple clients or agents, instead of each spinning up its own.
Running it
docker-compose.yml bind-mounts ~/.iframer into the container as /iframer-data, so host and container share the same database, credentials stored on the host are visible to docker-headful with no copy step.
bun run start:docker
bun run logs:docker
bun run stop:docker
Remote Docker host and local MCP on different machines? Point the MCP at it: IFRAMER_URL=https://your-host:3021 iframer-toolkit install mcp --dev
Environment variables
All optional, every one already has a working default the moment you install, nobody sets these day to day. IFRAMER_MODE and IFRAMER_URL are the two that actually matter for self-hosting.
IFRAMER_MODE
Needed to force self-hosted mode
“docker”, default is “local”
IFRAMER_URL
Needed when Docker isn't this machine
Docker API URL, default: http://localhost:3021
ANTHROPIC_API_KEY
Needed for auto CAPTCHA solving
Vision-based reCAPTCHA + hCaptcha solver
IFRAMER_SECRET
Needed to pin/sync a key
Auth + encryption key, auto-generated on first run otherwise
IFRAMER_DATA_DIR
Needed to relocate storage
Default: ~/.iframer
IFRAMER_LOCAL_PORT
Needed on port conflict
Base port for the shared local server (default: 3022, loopback only)
IFRAMER_TELEMETRY
Needed to disable logging
Set to 0 in the MCP env to turn off the local token-telemetry log
On-disk files and security are general to iframer, self-hosted or not: see architecture.
Open source · MIT license · 2026