The self-hosted image is the entire Executor server in a single container: the
typed API, the MCP server, authentication, QuickJS code execution, and the web
console, all in one process over a libSQL (SQLite) file. There is no external
database, worker, or proxy to run.
Run it
Using the published image:
Or build from a clone of the repo,
from apps/host-selfhost:
No configuration is required. Open http://localhost:4788;
the first person to create an account becomes the owner. After that, people join
through single-use invite links you mint from the Admin page, and open signup
is closed.
Storage
Everything that must persist (the SQLite database and the generated encryption
keys) lives in the data directory, mounted at /data in the container. Always
mount a volume there so it survives restarts and upgrades:
Back it up by snapshotting that volume (or copying /data, primarily data.db).
EXECUTOR_DATA_DIR (default /data) sets the directory, and EXECUTOR_DB_PATH
(default <data dir>/data.db) sets the database file.
Environment variables
Everything is optional: a bare run boots a working instance. The defaults below are
the container defaults.
Behind a domain or TLS
Set EXECUTOR_WEB_BASE_URL to the exact public URL you load in the browser (scheme, host, and
port). If it does not match, browser logins are rejected with an invalid-origin error.
For a headless deploy (CI or infra-as-code), set EXECUTOR_BOOTSTRAP_ADMIN_EMAIL
and EXECUTOR_BOOTSTRAP_ADMIN_PASSWORD to create the admin without the browser
setup screen.
Connect an agent
The server exposes a streamable-HTTP MCP endpoint at /mcp. Point your client at
http://localhost:4788/mcp (or your public URL). See MCP Proxy for
how that endpoint exposes your integrations.