Skip to main content
The SDK is the Python package vexlo. It runs inside your process, marks functions, captures their values, and writes records to the spool directory on the same host. The relay daemon that forwards those records is a separate process, not something inside yours; it is covered on the relay daemon page.

Requirements

The package ships py.typed, so mypy and other type checkers read its annotations. @vexlo.trace and @vexlo.step are typed with typing.ParamSpec, which is what sets the 3.10 floor.

Install from a checkout

vexlo is not yet published on PyPI, so the package is installed from a checkout of the vexlo-sdk-python repository. Both forms below install the same package.
The regular form builds a wheel and copies it into the environment. The editable form points the interpreter at the checkout’s src/ directory instead, so a change there is picked up by the next interpreter start without reinstalling. Below the floor, pip refuses before installing anything. On Python 3.9.6 the same command ends with:

Verify the install

The two outputs below are from Python 3.14.8. Import the package and print its public surface:
Confirm the version and that nothing else was pulled in:
The regular install and the editable install print the same two blocks.

The public surface

vexlo.__all__ is the whole public surface. Everything else under vexlo. is private and changes without notice. Two exception classes are not exported, and both subclass VexloError, so a host catches vexlo.VexloError: ConfigurationError, which init() raises on bad configuration, and UnsupportedCallable, which a marker raises at decoration over a classmethod, property, cached_property, or partialmethod object. Those two moments are the only ones that raise whatever else is configured. A marker, tag(), and flush() raise into the host only under init(strict=True); see the never-raise boundary. Next: initialise the SDK and record a first trace.