Browse documentation
Docs target stable release v0.22.0.Stable vs main checked 2026-11-01

Live OTLP receiver

Added in v0.21 and included in v0.22, tine serve --otlp runs a threaded OTLP/HTTP receiver. It is a separate mode from the self-hosted repository remote, not an authenticated production telemetry service.

Terminal
tine serve --otlp --otlp-port 4318 --otlp-idle 30
# Configure the sending exporter for OTLP/HTTP JSON:
# OTEL_EXPORTER_OTLP_PROTOCOL=http/json
# OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318

Accepted traffic

The receiver accepts POST /v1/traces and POST /v1/logs in OTLP/JSON, including gzip. Non-JSON requests return 400; OTLP protobuf returns 415 with a hint to select http/json. --max-body-mb bounds bodies before and after decompression, returning 413 on oversized input.

When runs are saved

Spans are grouped by traceId using the otel-json importer. Logs are grouped by session using otel-logs. A trace is saved when its root span arrives, after the configured idle interval, or on Ctrl-C when pending groups are flushed. Runs use the existing import write path and .tine_runs/<id>.tine save location. Source billing is distrusted and values are redacted.

Successful requests receive an empty object, or partialSuccess for spans missing a traceId. This grouping and flush policy is not a promise of a complete distributed trace across every late-arriving event.

Keep the trust boundary local

The default host is 127.0.0.1. The receiver is unauthenticated; a non-loopback --host requires --insecure-dev-any-host. Do not expose it as an authenticated public collector. Treat received telemetry as untrusted evidence and review sensitive content before sharing runs.

See offline imports, exports, and the current upgrade guide.