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.
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:4318Accepted 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.