Skip to main content
A Vexlo deployment includes a server that stores execution data and a relay on each application host that forwards SDK records. Both processes use the vexlo binary. This procedure builds that binary from source and starts an authenticated local deployment.

Prerequisites

Install Git, Go, npm, curl, Node.js 22.12 or later, and a C compiler for the SQLite driver. The Go module selects toolchain go1.27.3 through go.mod. The server build includes its web UI. The SDK and MCP have separate installation instructions under Python SDK and Connect an agent. The commands below use loopback ports 8080 and 9101; select different addresses in configuration if those ports are occupied.

Build the binary

From your chosen installation directory:
The web build must finish before the Go build: the binary embeds web/dist. Add the absolute vexlo/bin directory to your shell or process environment when using the binary later.

Select storage directories

Keep server storage and the SDK’s local queue in separate directories. From the installation parent directory, set:
The server resolves its database and values directory under VEXLO_DATA_DIR. Token commands use the same directory. The SDK and relay must share VEXLO_SPOOL_DIR on the application host. Keep these absolute paths in the environment of the processes you start.

Create deployment credentials

Create an ingest token for the relay and a read token for the UI and API. This example uses team development; both tokens must name the team whose records you want to read.
Each file contains the new token and its ID. The CLI displays the secret once; subsequent token list calls show metadata. See Authentication for token scope and revocation.

Save the process environment

From the installation parent directory, save the selected paths and credential-file locations:
The file records absolute paths. Loading it in another terminal restores the environment and reads the credentials from their saved files. Keep those files with this deployment.

Start the server and relay

Open a terminal in the installation parent directory, load the environment and start the server:
The server creates and migrates its database on startup. It serves the HTTP API and web UI at http://127.0.0.1:8080. Authentication remains enabled on loopback. Open a second terminal in the same installation parent directory:
The relay reads the local queue and forwards to VEXLO_ENDPOINT. Its development environment label is separate from the team supplied by the ingest token. On another application host, run a relay there with the SDK’s queue directory and the destination server’s URL. Configure TLS before using a non-loopback connection.

Verify access

In a third terminal, load vexlo-env.sh from the installation parent directory. Verify read access:
The example read token returned:
Check the relay’s health listener separately:
whoami verifies the credential and server connection. Relay health and status verify the forwarding process and queue. They do not prove an application has recorded a request yet. Complete the quickstart to send a request through the SDK, or instrument your service. Open http://127.0.0.1:8080, paste the read token in Read token, and select Connect. Use Search traces to find existing recordings.

Stop the processes

Press Ctrl+C in each process terminal to stop the server and relay. Their data directories remain at the paths you selected. To restart, load the same vexlo-env.sh file and run the server and relay commands again. For unattended deployment, run both processes under your process supervisor.

Plan for capture cost

Measure application latency and CPU with representative inputs and concurrency. Input binding, value conversion, exception-message formatting and optional log formatting run in the application process. A local writer performs file work in the background, and the relay handles the network hop. Measure those boundaries separately as well as end to end. Log capture formats and stores messages for each recorded attempt. Its cost depends on message volume and formatting. Custom-object adapters and exception formatting can execute application code, so measure with the objects and methods your service uses. Value sampling changes which captured bytes are retained. It does not skip the value-capture work or remove previews. capture_values=False skips input, output and error-value capture; tags and logs have separate controls. Capture controls documents the settings that affect captured data, and Retention explains the queue and server capacity limits.