Skip to main content
Open Source BEAM Tracing Tool

X-Trace

A web-based GUI for Extrace / recon_trace

Making BEAM tracing easy, visual, and interactive โ€” trace your Elixir & Erlang applications in real-time with a beautiful web interface.

Get Started

Quick Start in 3 Steps

From setup to tracing in under a minute. No complex configuration required.

1

Setup Node

Configure Erlang distribution โ€” set node name, cookie, and start the BEAM network.

X-Trace Setup: Configure node name and Erlang distribution settings
2

Configure Traces

Define trace specs โ€” pick modules, functions, and match specs using an intuitive GUI.

X-Trace Configure: Define trace specifications and match specs
3

Start Tracing

Watch function calls stream in real-time โ€” see arguments, return values, and timing.

X-Trace Tracing: Real-time trace output streaming in the browser
Live Demo

See It In Action

Watch how X-Trace enables distributed tracing & function monitoring in real-time.

In this demo: Set up a Node environment โ†’ Connect to a Phoenix server โ†’ Specify target functions โ†’ Send curl requests to trigger logic โ†’ X-Trace collects data and monitors runtime in real time.

Features

Everything You Need

Powerful BEAM tracing capabilities wrapped in an intuitive web interface.

Real-time Trace Streaming

Trace messages rendered live in the browser via Phoenix LiveView + Svelte. Zero latency feedback loop.

Local & Remote Tracing

Trace the local node or any connected remote BEAM node. Perfect for distributed system debugging.

Node Management

Setup Erlang distribution, connect/disconnect nodes, and auto-reconnect on failure โ€” all from the GUI.

Flexible Trace Specs

Supports {Mod, :fun, args} tuples, &Mod.fun/arity syntax, and match specs.

Rate Limiting

Configurable max traces per time window to prevent overwhelming production systems. Safety first.

Scope & PID Filtering

Trace :local or :global scope. Filter by specific PIDs or process groups.

Settings Persistence

Save, load, import, and export trace configurations. Never lose your debugging setup.

Cross-platform CLI

Single-binary distribution for macOS (x86_64/aarch64), Linux (x86_64/aarch64), and Windows via Burrito.

Desktop App

Also available as a native desktop application for an even more integrated experience.

Use Cases

Built for Real-World Debugging

Whether you're debugging a production issue or profiling performance, X-Trace has you covered.

Production Debugging

Diagnose issues in live systems without restarts or redeployments. Attach to running nodes, trace specific functions, and see what's happening in real-time.

Zero Downtime Live Inspection

Performance Analysis

Identify bottlenecks and slow functions by tracing execution with return values. See exactly which function calls take the longest.

Return Traces Timing Analysis

Function Call Tracing

Track execution flow through your application with flexible match specs. See arguments and return values in clean, formatted output.

Match Specs Formatted Output

Problem Investigation

Understand complex distributed system behavior by connecting to multiple BEAM nodes. Investigate hard-to-reproduce issues and race conditions.

Multi-node Distributed
Installation

Quick Start

Get up and running in seconds with pre-built binaries or the desktop app.

Option 1: Pre-built Binary

Download the CLI binary for your platform from Releases.

# Run the binary (example for macOS ARM)
./xtrace_macos_aarch64

# Then visit http://localhost:4000

Option 2: Desktop App

Download the desktop app from x_trace_desktop Releases.

Native desktop experience

โŒจ๏ธ CLI Options

Flag Alias Type Default Description
--ipstring127.0.0.1IP address to bind the HTTP server
--port-pinteger4000HTTP port
--node-nstringโ€”Remote node to connect to
--cookiestringโ€”Erlang cookie for distributed connections
--snamestringโ€”Short name for Erlang distribution
--namestringโ€”Fully qualified name for Erlang distribution
--openbooleanfalseOpen browser automatically on start
# Start on a custom port
./xtrace_macos_aarch64 -p 8080
# Connect to a running node
./xtrace_macos_aarch64 \
  --sname xtrace \
  --cookie mycookie \
  --node myapp@localhost
Documentation

Usage Guide

Step-by-step instructions for using X-Trace effectively.

  1. Open the Node Settings panel
  2. Enter a node name (e.g. xtrace)
  3. Choose short names (--sname) or long names (--name)
  4. Optionally set a cookie
  5. Click Setup
  1. Enter the target node name (e.g. myapp@localhost)
  2. Enter the cookie (if different from the default)
  3. Click Connect
  4. Use the Node Switcher to switch between connected nodes

Trace specs define which function calls to trace. Supported formats:

# Tuple format
{Enum, :map, :return_trace}
{MyApp.Repo, :all, :_}

# Capture syntax
&Enum.map/2

# Erlang modules
{:ets, :lookup, :return_trace}

Banned modules: recon_trace, io, lists are blocked to prevent tracing feedback loops.

Configure safe trace rates to protect production systems:

  • Max: Number of traces allowed per window (1โ€“1000)
  • Milliseconds: Time window in milliseconds (100โ€“10,000), leave empty for total count mode
  • Scope: :local (default) or :global
  • PID filter: :all, :new, :existing, or specific PIDs (e.g. 0.123.0)
  1. Add at least one trace spec
  2. Click Start Trace (โ–ถ)
  3. Watch trace messages stream in real-time
  4. Click Stop Trace (โน) to end the session

The generated Extrace.calls(...) command is displayed for reference โ€” you can copy it for use in IEx.

Under the Hood

Tech Stack

โšก
Elixir
+ Phoenix 1.7
๐ŸŽจ
Svelte 4
+ shadcn-svelte
๐Ÿ”ง
Extrace
recon_trace
๐Ÿ“ฆ
Burrito
Self-extracting