Skip to content

Configuration

Every variable the server, the CLI and the packages read, in one place. The server takes two flags as well — --listen and --data-dir — and a flag beats its variable. tracepad help prints the server's list; a variable the server does not know is logged as a warning at start, which catches a typo.

Sizes are bytes, durations are Go's (30m, 1h), and "on/off" variables take on/off, true/false, yes/no or 1/0.

The server

Variable Default What it does
TRACEPAD_LISTEN localhost:4318 Address to serve on. The default is this machine only: a localhost host is both loopback addresses, 127.0.0.1 and ::1. :4318 is every interface, over plain HTTP, and warns at start. The Docker image sets :4318. See install.md.
TRACEPAD_DATA_DIR $XDG_DATA_HOME/tracepad, else ~/.local/share/tracepad (/data in the image) The one directory everything is kept in.
TRACEPAD_URL unset The address people reach the server at, for the links it prints — the setup and invitation links. Set it behind a proxy. The CLI reads the same variable as its target. See accounts.md.
TRACEPAD_PROJECTS unset name:public_key:secret_key,… — projects and keys declared at start, so a deployment never has one printed. See docker.md.
TRACEPAD_ADMIN_TOKEN unset Bearer token for administration across projects, at least 32 characters (openssl rand -hex 32); a shorter one stops the server from starting. See admin.md.
TRACEPAD_ADMIN_TOKEN_FILE unset Read the admin token from this file instead; readable by the server's user and nobody else.
TRACEPAD_SETUP on off mints and prints no setup link — for a deployment that makes its first owner with the admin token.
TRACEPAD_SESSION_DAYS 30 How long a browser sign-in lasts, sliding; at least 1.
TRACEPAD_TRUSTED_PROXIES loopback Peers whose X-Forwarded-For, -Proto and -Host are believed: addresses and CIDR ranges, or none. See docker.md.
TRACEPAD_STORE_RAW on Keep every accepted export body, so the archive can be replayed (export.md). Costs disk.
TRACEPAD_MAX_BODY_BYTES 20971520 (20 MiB) Request body cap, applied to the wire bytes and again to what they decompress to. See ingest.md.
TRACEPAD_MAX_SPANS_PER_REQUEST 20000 Spans one export may carry; at least 1.
TRACEPAD_BODY_BUDGET_BYTES four times the body cap Request bodies the server holds in memory at once; at least the body cap. Past it a write waits and then gets 429.
TRACEPAD_RESPONSE_BUDGET_BYTES 51200 The default byte budget of a read response (api.md); a request may ask for another. From 4 KiB to 5 MiB.
TRACEPAD_READ_TIMEOUT 20s Deadline of one read request, its wait for a slot included; from 1s to 4m.
TRACEPAD_READ_CONCURRENCY two per CPU, at least 4 Reads served at once; at least 1.
TRACEPAD_MAX_CONNECTIONS 1024 Client connections held at once; at least 16. Past it a new connection waits to be accepted, and the connection idle longest, or else one that has sent nothing for two seconds, is closed to make room for it.
TRACEPAD_MAX_CONNECTIONS_PER_SOURCE a quarter of TRACEPAD_MAX_CONNECTIONS Connections one address (an IPv6 /64) may hold; from 1 to TRACEPAD_MAX_CONNECTIONS. Past it the source's own idle ones make room, and a new one is refused when all are busy. A proxy in TRACEPAD_TRUSTED_PROXIES is exempt.
TRACEPAD_MCP on Serve MCP at /mcp (mcp.md).
TRACEPAD_SWEEP_INTERVAL 1h Cadence of the retention sweep; at least 1s. See retention.md.
TRACEPAD_ROLLUP_INTERVAL 5m Cadence of the statistics rollup; at least 1s.
TRACEPAD_IN_CONTAINER unset Set to 1 by the image so a wildcard bind is read as the design rather than a warning. Not for you to set.

The CLI and the MCP server

Variable Default What it does
TRACEPAD_URL http://localhost:4318 The server to talk to.
TRACEPAD_API_KEY unset The key, or the admin token where a command says so. Prefer it to --key, which shows in the process list. With it unset, a command that takes the admin token reads TRACEPAD_ADMIN_TOKEN or TRACEPAD_ADMIN_TOKEN_FILE instead, for a server on this machine only.

tracepad health with neither --url nor TRACEPAD_URL looks at TRACEPAD_LISTEN. cli.md has the rest.

The Python, Node and Go packages

Variable Default What it does
TRACEPAD_URL unset Where the store is. TRACEPAD_HOST, the packages' first name for it, still works and warns once.
TRACEPAD_API_KEY unset A secret key, sent as Bearer. An ingest key is enough to export.
TRACEPAD_ENVIRONMENT unset The deployment this process is.
TRACEPAD_RELEASE unset The version of this deployment.
TRACEPAD_EXPORT_TIMEOUT 5 Seconds one export may take, retries included.

TRACEPAD_URL is one variable with two readers. The server takes it as the public, browser-facing address (for the links it prints), the CLI and the packages as the address to talk to. In a .env shared between the server and an application, the application therefore sends its spans to the public address; if it should use an internal one (http://tracepad:4318), give init the host explicitly or keep a separate .env for it.

Options passed to init win over these. The OpenTelemetry variables (OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES, the exporter's and the batch processor's own) are the OpenTelemetry SDK's business, and it honours them as they are. sdk-python.md, sdk-js.md and sdk-go.md have the details.

The install script

Read by scripts/install.sh — the curl … | sh line of the quickstart — and, for TRACEPAD_INSTALL_DIR and TRACEPAD_DOWNLOAD_URL, by tracepad upgrade, which installs the same way; the server does not warn about one left exported.

Variable Default What it does
TRACEPAD_VERSION the newest stable release The release to install, 0.1.0-rc.1 or v0.1.0-rc.1. A release candidate is installed only when named here.
TRACEPAD_INSTALL_DIR ~/.local/bin Where the binary goes. Never needs sudo unless you point it somewhere that does.
TRACEPAD_NO_SKILL unset 1 installs the binary alone, without the agent skill.
TRACEPAD_DOWNLOAD_URL https://github.com/tracepad/tracepad/releases A mirror with the same layout (download/v<version>/…, latest/download/checksums.txt), over https:// or file://.
TRACEPAD_RELEASE_FETCHED unset Internal, not a setting: the install script sets it, never you, to the release whose checksums it fetched, for the tracepad upgrade --plan it asks of the binary at the install path, which then does not look that release up again.

See install.md.

What reaches the network

The server reaches nothing. It sends no telemetry, checks for no update and asks no other host anything: it answers the requests it is sent, and that is all. Its web interface loads nothing from anywhere else either — its content security policy allows its own address only — and its links to these pages open GitHub when you follow one, not before.

What does go out, and where:

Who Where to When
The CLI and tracepad mcp your server, at TRACEPAD_URL (or --url) every command
The Python, Node and Go packages your server, at TRACEPAD_URL when they export
tracepad export the address you give it, and only that one when you run it
tracepad upgrade GitHub's releases (or TRACEPAD_DOWNLOAD_URL), for the release list and the archive; gh attestation verify asks GitHub too, when gh is logged in; a container's upgrade has Docker pull the image from its registry when you run it; --plan reads the release list only — and nothing when the install script asks the binary at the install path for the version it just fetched
The install script GitHub's releases (or TRACEPAD_DOWNLOAD_URL) when you run it

tracepad upgrade also asks servers and containers on this machine for their version, at their own addresses; nothing it reads there leaves the machine.

Sending from any OpenTelemetry SDK

These are the OpenTelemetry SDK's, not Tracepad's, and this is what to set:

Variable Value
OTEL_EXPORTER_OTLP_PROTOCOL http/protobuf — required wherever the SDK defaults to gRPC — Tracepad has no gRPC receiver. http/json works too.
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT http://<server>/v1/traces
OTEL_EXPORTER_OTLP_HEADERS authorization=Bearer <secret key>

The Langfuse SDKs take LANGFUSE_BASE_URL (older ones LANGFUSE_HOST), LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY instead (langfuse-sdk.md).