Skip to main content

vector-vrl

Vector's own VRL compiler and runtime, compiled into a Python extension. The real VRL engine from Vector, self contained - no binary to install, nothing to shell out to.

License Python

pip install vector-vrl
from vector_vrl import execute_vrl, validate_vrl

vrl = """
parsed, err = parse_json(.message)
if err == null {
    .level = parsed.level
}
"""

execute_vrl(vrl, ['{"message": "{\\"level\\": \\"info\\"}"}'])
# [{'level': 'info', 'message': '{"level": "info"}'}]

validate_vrl(vrl).success
# True

What it is good for

  • Test VRL in CI without installing Vector. validate_vrl compiles without running, so a broken transform fails your test suite instead of your pipeline.
  • Check a Vector config before you ship it. validate_config walks a YAML/TOML/JSON config and compiles every remap transform's VRL, catching the most common way a config breaks. It checks the VRL, not the sinks - see the caveat under The API.
  • Build VRL tooling - playgrounds, linters, editor plugins, config generators - against the real compiler rather than a regex approximation.
  • Process events in Python with semantics identical to what your Vector deployment will do to the same data.
  • AI agents for VRL processing and development loops - generate a candidate, compile it, run it, iterate, all without a Vector install.

Safer to hand untrusted VRL

Two guards apply to every entry point that compiles VRL:

  • No host, no network. get_env_var, get_hostname, http_request, dns_lookup and six more are not compiled in. Caller-supplied VRL cannot read your environment or reach out of the process - it fails to compile instead. This is what the published wheel ships. Someone building the crate from source can turn those ten functions on with the full-stdlib Cargo feature; only do that where you control the VRL text.
  • No nesting bomb. VRL source may not nest brackets past 64 levels. Past a few hundred the parser's own recursion overflows the stack and kills the process, which no Python except can catch, so the check runs before the parser ever sees the input. There is no way to switch this one off.

That combination is what makes it reasonable to accept VRL from a user - a multi-tenant playground, a customer-supplied transform, a config someone pasted in. The reasoning is in docs/architecture.md.

The API

execute_vrl(vrl, events, secrets=None) Compile once, run over a batch, get the transformed events back
execute_vrl_with_secrets(vrl, events, secrets=None) The same run, but each entry carries the event's secret store as well
validate_vrl(vrl) Compile without running. Returns a VrlResult, never raises on bad VRL
get_vrl_performance(vrl, events, iterations=100) Run it repeatedly, get events/sec
Vector Batch runner holding state across calls - .initialize(), .process_logs(), .get_stats()
validate_config(path|dict) Compile every remap transform's VRL in a Vector config (YAML/TOML/JSON), in-process
validate_config_with_vector(path) Full config check by running vector validate - needs the binary, never a daemon

Vector runs the VRL step alone. Its config argument is stored but never applied - there is no sources/transforms/sinks pipeline here. If you want the full pipeline, run Vector itself.

Checking a Vector config

There are two levels, and the difference matters.

validate_config is in-process and needs no vector binary. It compiles the source of every remap transform and reports each by name. It says nothing about sources, sinks or wiring, and it cannot judge VRL that calls get_enrichment_table_record or get_secret - those are registered by Vector from enrichment_tables: and secret backends declared in the config, outside VRL, so this build has never heard of them. Rather than call a valid config broken, it reports those transforms as unchecked with a reason. Reading a YAML config needs pip install vector-vrl[yaml]; TOML and JSON need nothing.

validate_config_with_vector runs vector validate --no-environment and checks the lot - wiring, component options, and the enrichment-backed VRL the in-process check has to skip. It needs Vector installed, and it is one-shot: Vector exits as soon as it has answered, never running as a daemon and never moving data.

Exact signatures, return shapes, and the rough edges worth knowing (nested objects come back as JSON strings, a per-event runtime error replaces that event's dict) are in docs/reference-python-api.md.

Contributing

See CONTRIBUTING.md.

License

Apache License, Version 2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.4 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

vector_vrl-1.0.6-cp312-abi3-macosx_11_0_arm64.whl (4.7 MB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

vector_vrl-1.0.6-cp312-abi3-macosx_10_12_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

Details for the file vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.12+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b0b948b0f84688326647cd99aec87a30d7d40a62da4338f20134ef10d010604c
MD5 51ec2cd661b563ea697eab1dc2d1828b
BLAKE2b-256 ebaf754c29a814e9464645f710d79dfc4f4020c8553e17e8938eae74b2cf5a43

See more details on using hashes here.

File details

Details for the file vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.12+, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vector_vrl-1.0.6-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5d5fb2804cfd622a7461869090cf025169f800f0fa07dc7452ab0a24cb52fd26
MD5 4843a9e265aa82a9e753a3fcad05b6eb
BLAKE2b-256 a124ccb1559608bfa958e7d97a92abfedef218f3ca6557017dda5694a64ab211

See more details on using hashes here.

File details

Details for the file vector_vrl-1.0.6-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: vector_vrl-1.0.6-cp312-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 4.7 MB
  • Tags: CPython 3.12+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vector_vrl-1.0.6-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 970a49e99e769978f0d9b9f0c17e14eedd7bda479f08012dd1cd0f98c6cfe972
MD5 e9b07d1f35fdb568e7f80738ec61ba30
BLAKE2b-256 5ce674bff46af3d047e301b67e5504b2d876e1705dbcfa8b2a53238485feb6b9

See more details on using hashes here.

File details

Details for the file vector_vrl-1.0.6-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: vector_vrl-1.0.6-cp312-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.12+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for vector_vrl-1.0.6-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a7883c8ba316239ca665d166c59c2321d5dbd054c7b3444afe4796b0d65d6086
MD5 1a3fee4fb97a4f5ea2b6abf9e9d6d21d
BLAKE2b-256 9230af52f34a3ea631b13c547c5e2024008db918a4724717d4fbdd9fc61aff33

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.7

4 files

This release

1.0.6 This release

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page