Skip to content

VS Code Extension

autotel-vscode puts the receiver in your editor. It listens for OTLP/HTTP on 127.0.0.1:4318, buffers traces and logs in memory, and surfaces them in the activity bar. Spans that carry code.filepath and code.lineno jump straight to the source line.

No daemon, no separate collector, no account. Point any OTLP-compatible exporter at http://127.0.0.1:4318 and the data shows up in the sidebar.

The extension publishes to the VS Code Marketplace as jagreehal.autotel. Install from the Extensions view, or from the command line:

Terminal window
code --install-extension jagreehal.autotel

Reload the window. A radio-tower icon appears in the status bar once the receiver is up.

Most OTLP/HTTP exporters need no extra configuration. The OpenTelemetry SDK defaults already match.

Terminal window
OTEL_EXPORTER_OTLP_PROTOCOL=http/json \
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 \
node app.js

With autotel, the same applies. init() honours OTEL_EXPORTER_OTLP_ENDPOINT, so no code change is needed:

import { init, withTracing } from 'autotel';
init({ service: 'my-app' });
const checkout = withTracing({ name: 'checkout' })(
(ctx) => async (req, res) => {
ctx.setAttribute('order.id', req.body.id);
// ...
},
);

The Services view lists every service that has sent a span, with span and error counts. The Traces view is the recent trace list, newest first; expand a trace to see its spans and click a span to open it. The Logs view shows the most recent log records with severity hints.

The Errors view is the one that earns its keep on a noisy day: it groups exceptions by fingerprint, so the same TypeError across ten traces collapses into one row with a count of ten, not ten separate rows.

The buffer is in-memory. When it fills up, older entries are dropped and the dropped count shows in the status bar tooltip. The defaults (10,000 spans, 10,000 logs) are enough for hours of typical local development.

Right-click any span and pick Open Span Detail to open it in a webview. The view shows identity, timing, status, attributes (sorted), and any events. If the span has source metadata, a Reveal Source button opens the file at the right line.

The webview talks back to the extension over postMessage. It can ask the extension to reveal source or copy the span ID; it cannot mutate buffer state. CSP is locked down with a per-render nonce, so only the bundled webview script runs.

Command Description
Autotel: Start Receiver Start the OTLP HTTP receiver.
Autotel: Stop Receiver Stop the receiver and free the port.
Autotel: Set Receiver Port Change the listen port. Saved to workspace settings.
Autotel: Clear Buffered Data Drop all buffered spans, logs, and error groups.
Autotel: Reveal Span Source Jump to code.filepath:code.lineno for the selected span.
Autotel: Copy Span ID Copy the span ID to the clipboard.
Autotel: Open Span Detail Open the span in the detail webview.
Autotel: Open Devtools UI Open the receiver’s embedded devtools UI.
Autotel: Open Metrics Show local service and operation latency/error summaries.
Autotel: Open Service Map Show cross-service edges from buffered traces.
Autotel: Query Remote Backend Pull recent traces from the configured read backend.
Autotel: Set Remote Backend Credential Save a backend credential in VS Code SecretStorage.
Autotel: Clear Remote Backend Credential Remove a saved backend credential.
Setting Default Description
autotel.receiver.autoStart onAutotelProject off, start only for an Autotel workspace, or always.
autotel.receiver.host 127.0.0.1 Bind host. Non-loopback values require confirmation.
autotel.receiver.port 4318 TCP port. Standard OTLP/HTTP port.
autotel.buffer.maxSpans 10000 Span buffer cap. Older entries drop first.
autotel.buffer.maxLogs 10000 Log buffer cap.
autotel.buffer.maxAgeMs 1800000 Reserved for future age-based eviction.
autotel.devtools.url null Devtools UI override; otherwise uses the receiver host and port.
autotel.backend.type none jaeger, tempo, honeycomb, datadog, logfire, or signoz.
autotel.backend.url null Remote read API base URL.
autotel.backend.dataset null Dataset/scope required by backends such as Honeycomb.
autotel.codeLens.enabled true Show count, p50, p95, and error rate above instrumented functions.

The default auto-start mode scans workspace package.json files and binds the receiver only when it finds an autotel or autotel-* dependency. Use Autotel: Start Receiver in other workspaces.

Choose autotel.backend.type, autotel.backend.url, and any required dataset in workspace settings. Store credentials with Autotel: Set Remote Backend Credential; they are written to VS Code SecretStorage, not settings.json.

Backend Credential entered in the command
Jaeger none
Tempo optional bearer token
Honeycomb API key; also set autotel.backend.dataset
Datadog <api-key>:<application-key>
Logfire read-scope token
SigNoz optional API key for authenticated deployments

Run Autotel: Query Remote Backend, select a service, and the extension pulls up to 50 recent traces into the same in-memory buffer used by the tree views, span detail, CodeLens, metrics panel, and embedded devtools UI. Vendor adapters retry HTTP 429 responses using Retry-After when provided.

If something else is already on 4318 (an OpenTelemetry Collector is the usual culprit), the extension cannot bind. The status bar shows “Autotel port busy” and a warning fires. Run Autotel: Set Receiver Port and pick another port. Update your app’s OTEL_EXPORTER_OTLP_ENDPOINT to match.

  • The receiver binds to 127.0.0.1 by default. Setting the host to something non-loopback prompts before starting.
  • The revealSource command rejects paths outside any workspace folder. The check uses path.relative against the resolved workspace root, so symlink games and .. traversal cannot escape.
  • Maximum request body is 10 MB. Anything larger returns 413 Payload too large.
  • Remote-backend credentials live in vscode.SecretStorage; only backend type, URL, and dataset live in workspace settings.
  • VS Code 1.120 or later.
  • OTLP/HTTP with JSON. Protobuf is not yet supported.
  • Works with autotel and with vanilla OpenTelemetry SDKs.