<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.tenzir.com/changelog/tenzir</id>
    <title>Tenzir Node Changelog</title>
    <updated>2026-05-07T00:00:00.000Z</updated>
    <generator>Tenzir Changelog</generator>
    <author>
        <name>Tenzir</name>
        <uri>https://tenzir.com</uri>
    </author>
    <link rel="alternate" href="https://docs.tenzir.com/changelog/tenzir"/>
    <link rel="self" href="https://docs.tenzir.com/changelog/tenzir.xml"/>
    <subtitle>Release notes and changelog for Tenzir Node</subtitle>
    <icon>https://docs.tenzir.com/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.36.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-36-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-36-0"/>
        <updated>2026-05-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release makes int64/uint64 column merging lossless during parsing, so fields like `flow_id` that mix signed and unsigned values no longer cause unnecessary table-slice splits. It also extends ocsf::derive to handle list-valued enum fields for full bidirectional OCSF enum normalization.]]></summary>
        <content type="html"><![CDATA[<p>This release makes int64/uint64 column merging lossless during parsing, so fields like <code>flow_id</code> that mix signed and unsigned values no longer cause unnecessary table-slice splits. It also extends ocsf::derive to handle list-valued enum fields for full bidirectional OCSF enum normalization.</p>

<h2>Features</h2>

<h3>OCSF enum list derivation</h3>
<p><small>Apr 30, 2026 · <a href="https://github.com/jachris">@jachris</a>, <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5354">#5354</a></small></p>
<p><code>ocsf::derive</code> now derives OCSF enum sibling fields for lists, not just scalar enum fields. For example, DNS answers with <code>flag_ids: [1, 3, 4]</code> now also get <code>flags: ["Authoritative Answer", "Recursion Desired", "Recursion Available"]</code>, and the reverse direction works for <code>flags</code> to <code>flag_ids</code> as well.</p>

<h2>Changes</h2>

<h3>Lossless int64/uint64 merging during parsing</h3>
<p><small>May 5, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a>, <a href="https://github.com/claude">@claude</a></small></p>
<p>Parsing data that mixes <code>int64</code> and <code>uint64</code> values in the same field no longer
produces unnecessary table-slice splits, improving batching performance. Fields
like <code>flow_id</code> that are always non-negative but occasionally exceed the signed
integer limit of  <code>2^63 − 1</code> are now merged into a single <code>uint64</code> column where
possible, instead of being emitted as separate slices.</p>

<h2>Bug Fixes</h2>

<h3>Empty if branches in the new executor</h3>
<p><small>May 6, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6128">#6128</a></small></p>
<p>Empty <code>if</code> branches no longer crash when running pipelines with the new executor. For example, <code>if false {}</code> now behaves like an empty pass-through branch instead of triggering an internal assertion failure.</p>
]]></content>
        <published>2026-05-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.35.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-35-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-35-2"/>
        <updated>2026-05-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes two package-related bugs: startup pipelines can now reliably reference operators from static packages, and UDOs with slash-delimited string defaults (e.g. "/tmp-data/") load correctly without internal errors.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes two package-related bugs: startup pipelines can now reliably reference operators from static packages, and UDOs with slash-delimited string defaults (e.g. "/tmp-data/") load correctly without internal errors.</p>

<h2>Bug Fixes</h2>

<h3>Configured pipelines with package operators</h3>
<p><small>May 4, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Configured startup pipelines can now reference operators from static packages reliably. Previously, such pipelines could fail during node startup with <code>module &#x3C;package> not found</code>, even though the same package operator worked when run manually after startup.</p>

<h3>Slash-delimited UDO defaults</h3>
<p><small>May 2, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6108">#6108</a></small></p>
<p>Package UDOs now load correctly when a typed string default looks like a TQL pattern, such as <code>default: "/tmp-data/"</code>.</p>
<p>Previously, loading such a package could abort with an unexpected internal error before any pipeline ran.</p>
]]></content>
        <published>2026-05-05T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.35.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-35-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-35-1"/>
        <updated>2026-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release restores correct retention for metrics and diagnostics in mixed-age partitions and brings back actionable TLS hints when ClickHouse connections fail due to a TLS/plaintext mismatch.]]></summary>
        <content type="html"><![CDATA[<p>This release restores correct retention for metrics and diagnostics in mixed-age partitions and brings back actionable TLS hints when ClickHouse connections fail due to a TLS/plaintext mismatch.</p>

<h2>Bug Fixes</h2>

<h3>ClickHouse TLS mismatch diagnostics</h3>
<p><small>Apr 29, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6098">#6098</a></small></p>
<p>ClickHouse connection errors caused by TLS/plaintext mismatches now include the TLS notes and hint again. This helps identify when <code>to_clickhouse</code> is using TLS against a plaintext ClickHouse endpoint and suggests setting <code>tls=false</code> when appropriate.</p>

<h3>Retention for mixed-age metrics partitions</h3>
<p><small>Apr 28, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6086">#6086</a></small></p>
<p>Default retention policies now continue deleting metrics and diagnostics as their timestamps age into the retention window, even when older and newer events share a partition.</p>
<p>Previously, a partition that still contained newer events after retention could be skipped by later retention runs, leaving those events behind after they expired.</p>
]]></content>
        <published>2026-04-30T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.35.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-35-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-35-0"/>
        <updated>2026-04-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tenzir can now consume from and publish to NATS JetStream subjects with from_nats and to_nats. This release also fixes crashes in static musl builds when evaluating deeply nested generated TQL expressions.]]></summary>
        <content type="html"><![CDATA[<p>Tenzir can now consume from and publish to NATS JetStream subjects with from_nats and to_nats. This release also fixes crashes in static musl builds when evaluating deeply nested generated TQL expressions.</p>

<h2>Features</h2>

<h3>NATS JetStream operators</h3>
<p><small>Apr 17, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Tenzir can now consume from and publish to NATS JetStream subjects with
<code>from_nats</code> and <code>to_nats</code>.</p>
<p>Use <code>from_nats</code> to receive one event per message. The raw payload appears in the
<code>message</code> blob field, and <code>metadata_field</code> attaches NATS metadata:</p>
<pre><code class="language-tql">from_nats "alerts", metadata_field=nats
parsed = string(message).parse_json()
</code></pre>
<p>Use <code>to_nats</code> to publish one message per event. By default, the operator
serializes the whole event with <code>this.print_ndjson()</code>:</p>
<pre><code class="language-tql">from {severity: "high", alert_type: "suspicious-login"}
to_nats "alerts"
</code></pre>
<p>Both operators support configurable connection settings, authentication, and
the standard Tenzir <code>tls</code> record.</p>

<h2>Bug Fixes</h2>

<h3>Static musl builds no longer crash on deep TQL expressions</h3>
<p><small>Apr 27, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6082">#6082</a></small></p>
<p>Static musl builds of <code>tenzir</code> no longer crash on deeply nested generated TQL
expressions.</p>
<p>This affected generated pipelines with deeply nested expressions, for example
rules or transformations that expand into long left-associated operator chains.</p>
<p>The <code>tenzir</code> binary now links with a larger default thread stack size on musl,
which brings its behavior in line with non-static builds for these pipelines.</p>
]]></content>
        <published>2026-04-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.34.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-34-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-34-0"/>
        <updated>2026-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds OData pagination support to the from_http operator, enabling seamless iteration over Microsoft Graph and other OData v4 collection responses.]]></summary>
        <content type="html"><![CDATA[<p>This release adds OData pagination support to the from_http operator, enabling seamless iteration over Microsoft Graph and other OData v4 collection responses.</p>

<h2>Features</h2>

<h3>OData pagination for from_http</h3>
<p><small>Apr 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>from_http</code> operator now supports <code>paginate="odata"</code> for
<a href="https://www.oasis-open.org/standard/odata-v4-01-os/">OData</a> collection
responses such as Microsoft Graph:</p>
<pre><code class="language-tql">from_http "https://graph.microsoft.com/v1.0/users",
  headers={"ConsistencyLevel": "eventual"},
  paginate="odata" {
  read_json
}
</code></pre>
<p>This mode emits the objects from the response body's top-level <code>value</code> array
and follows top-level <code>@odata.nextLink</code> URLs until no next link is present. The
next link can be absolute or relative to the current response URL.</p>

<h2>Bug Fixes</h2>

<h3>SentinelOne Data Lake sink support in the new executor</h3>
<p><small>Apr 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6081">#6081</a></small></p>
<p>The <code>to_sentinelone_data_lake</code> operator now works in pipelines that run on the new executor. Previously, using it there failed before the pipeline could send events.</p>
<pre><code class="language-tql">from {message: "hello"}
to_sentinelone_data_lake "https://example.com", token="TOKEN"
</code></pre>
]]></content>
        <published>2026-04-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.33.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-33-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-33-0"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release makes the subnet function work directly with typed and string IP addresses, which removes boilerplate in TQL pipelines. It also fixes several stability issues in where, unroll, files, context::enrich, and collection indexing.]]></summary>
        <content type="html"><![CDATA[<p>This release makes the subnet function work directly with typed and string IP addresses, which removes boilerplate in TQL pipelines. It also fixes several stability issues in where, unroll, files, context::enrich, and collection indexing.</p>

<h2>Features</h2>

<h3>IP address support in subnet</h3>
<p><small>Apr 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>subnet</code> function now accepts typed IP addresses, plain IP strings, and
existing subnet values with an optional prefix length:</p>
<pre><code class="language-tql">from {source_ip: 10.10.1.124}
net = subnet(source_ip, 24)
</code></pre>
<p>This returns <code>10.10.1.0/24</code> without converting the IP address to a string first.
When you omit the prefix, IPv4 addresses become <code>/32</code> host subnets and IPv6
addresses become <code>/128</code> host subnets.</p>

<h2>Bug Fixes</h2>

<h3>Large unroll output stability</h3>
<p><small>Apr 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>unroll</code> operator no longer crashes when expanding very large lists into output that exceeds Arrow's per-array capacity.</p>

<h3>Recursive files traversal of unreadable directories</h3>
<p><small>Apr 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>files</code> operator now skips unreadable child directories during recursive traversal, emits a warning for each skipped directory by default, and continues listing accessible siblings. Set <code>skip_permission_denied=true</code> to ignore permission-denied paths silently: this suppresses warnings for skipped child directories and still makes an unreadable initial directory produce no events instead of an error. Non-permission filesystem errors continue to fail the pipeline.</p>

<h3>Fixed unbounded memory growth `context::enrich`</h3>
<p><small>Apr 23, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a></small></p>
<p>We fixed an issue in the <code>context::enrich</code> operator that did cause unbounded
memory growth.</p>

<h3>Crash fix for deep left-associated where expressions</h3>
<p><small>Apr 23, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6068">#6068</a></small></p>
<p>Tenzir no longer segfaults on some very deep left-associated boolean
expressions in <code>where</code> clauses due to source-location handling.</p>

<h3>Unsigned integer indexing in TQL</h3>
<p><small>Apr 22, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Both list and record indexing in TQL now work with signed and unsigned integer indices.
This also applies to record field-position indexing and to the <code>get</code> function for records and lists.</p>
]]></content>
        <published>2026-04-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.32.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-32-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-32-1"/>
        <updated>2026-04-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release fixes two correctness issues in stateful pipeline execution. Partition rebuilds now complete after writing replacement partitions, and periodic summarize output remains deterministic for delayed or sparse streams.]]></summary>
        <content type="html"><![CDATA[<p>This patch release fixes two correctness issues in stateful pipeline execution. Partition rebuilds now complete after writing replacement partitions, and periodic summarize output remains deterministic for delayed or sparse streams.</p>

<h2>Bug Fixes</h2>

<h3>Partition rebuild completion</h3>
<p><small>Apr 20, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6059">#6059</a></small></p>
<p>Partition rebuilds now finish after persisting rebuilt partitions. Previously, rebuild jobs could remain stuck indefinitely even though the replacement partitions were written successfully.</p>

<h3>Deterministic periodic summarize output</h3>
<p><small>Apr 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>summarize</code> operator now starts <code>frequency</code>-based emission with the first
input event and emits overdue periodic results before later events are
aggregated. This makes periodic output deterministic in <code>reset</code>,
<code>cumulative</code>, and <code>update</code> modes for delayed or sparse streams.</p>
<p>For example:</p>
<pre><code class="language-tql">from {ts: 0ms.from_epoch(), x: 1},
     {ts: 90ms.from_epoch(), x: 1},
     {ts: 360ms.from_epoch(), x: 1}
delay ts
summarize count=count(), options={frequency: 300ms, mode: "cumulative"}
</code></pre>
<p>The first periodic result now consistently reports a count of <code>2</code> before the
third event arrives.</p>
]]></content>
        <published>2026-04-21T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.32.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-32-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-32-0"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tenzir nodes now honor standard HTTP proxy environment variables when connecting to the Tenzir Platform, and hash functions produce correct checksums for binary values.]]></summary>
        <content type="html"><![CDATA[<p>Tenzir nodes now honor standard HTTP proxy environment variables when connecting to the Tenzir Platform, and hash functions produce correct checksums for binary values.</p>

<h2>Features</h2>

<h3>Platform websocket proxy support</h3>
<p><small>Apr 16, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6039">#6039</a></small></p>
<p>Tenzir nodes now honor standard HTTP proxy environment variables when connecting to Tenzir Platform:</p>
<pre><code class="language-sh">HTTPS_PROXY=http://proxy.example:3128 tenzir-node
</code></pre>
<p>Use <code>NO_PROXY</code> to bypass the proxy for selected hosts. This helps deployments where outbound connections to the Platform websocket gateway must go through an HTTP proxy.</p>

<h2>Changes</h2>

<h3>Add `accept_http` operator for receiving HTTP requests</h3>
<p><small>Apr 15, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We added a new operator to accept data from incoming HTTP connections.</p>
<p>The <code>server</code> option of the <code>from_http</code> operator is now deprecated.
Going forward, it should only be used for client-mode HTTP operations,
and the new <code>accept_http</code> operator should be used for server-mode
operations.</p>

<h2>Bug Fixes</h2>

<h3>Raw-byte hashing for binary values</h3>
<p><small>Apr 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/6022">#6022</a></small></p>
<p>The <code>hash_*</code> functions now hash <code>blob</code> values by their raw bytes. This makes checksums computed from binary data match external tools such as <code>md5sum</code> and <code>sha256sum</code>.</p>
<p>For example:</p>
<pre><code class="language-tql">from_file "trace.pcap" {
  read_all binary=true
}
md5 = data.hash_md5()
</code></pre>
<p>This is useful for verifying file contents and round-tripping binary formats without leaving TQL.</p>
]]></content>
        <published>2026-04-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.31.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-31-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-31-0"/>
        <updated>2026-04-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tenzir now unifies live and retrospective context matching with the new `context::lookup` operator, and it adds pipeline names to diagnostics and metrics for easier operational correlation. This release also improves export reliability under load and fixes Azure transport errors, HTTP Host headers for non-standard ports, and rebuilt-partition export correctness.]]></summary>
        <content type="html"><![CDATA[<p>Tenzir now unifies live and retrospective context matching with the new <code>context::lookup</code> operator, and it adds pipeline names to diagnostics and metrics for easier operational correlation. This release also improves export reliability under load and fixes Azure transport errors, HTTP Host headers for non-standard ports, and rebuilt-partition export correctness.</p>

<h2>Features</h2>

<h3>Unified context lookups with `context::lookup` operator</h3>
<p><small>Apr 1, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5964">#5964</a></small></p>
<p>The <code>context::lookup</code> operator enables unified matching of events against contexts
by combining live and retrospective filtering in a single operation.</p>
<p>The operator automatically translates context updates into historical queries
while simultaneously filtering all newly ingested data against any context updates.</p>
<p>This provides:</p>
<ul>
<li><strong>Live matching</strong>: Filter incoming events through a context with <code>live=true</code></li>
<li><strong>Retrospective matching</strong>: Apply context updates to historical data with <code>retro=true</code></li>
<li><strong>Unified operation</strong>: Use both together (default) to match all events—new and historical</li>
</ul>
<p>Example usage:</p>
<pre><code class="language-tql">context::lookup "feodo", field=src_ip
where @name == "suricata.flow"
</code></pre>

<h3>Include pipeline names in diagnostics and metrics</h3>
<p><small>Mar 30, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/tenzir/pull/5959">#5959</a></small></p>
<p>The <code>metrics</code> and <code>diagnostics</code> operators now include a <code>pipeline_name</code> field.</p>
<p>Previously, output from these operators only identified the source pipeline by its ID.
Now the human-readable name is available too, making it straightforward to filter
or group results by pipeline name without needing to look up IDs separately.</p>
<p>Please keep in mind that pipeline names are not unique.</p>

<h2>Bug Fixes</h2>

<h3>Fix crash on Azure SSL/transport errors during read and write operations</h3>
<p><small>Apr 8, 2026 · <a href="https://github.com/claude">@claude</a></small></p>
<p>Bumped Apache Arrow from 23.0.0 to 23.0.1, which includes an upstream fix
for unhandled <code>Azure::Core::Http::TransportException</code> in Arrow's
<code>AzureFileSystem</code> methods. Previously, transport-level errors (e.g., SSL
certificate failures) could crash the node during file listing, reading, or
writing. Additionally, the direct Azure SDK calls in the blob deletion code
paths now catch <code>Azure::Core::RequestFailedException</code> (the common base of
both <code>StorageException</code> and <code>TransportException</code>) instead of listing
specific exception types.</p>

<h3>Reliable export for null rows in rebuilt partitions</h3>
<p><small>Apr 7, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5988">#5988</a></small></p>
<p>The <code>export</code> operator no longer emits partially populated events from rebuilt partitions when a row is null at the record level. Previously, some events could appear with most fields set to <code>null</code> while a few values, such as <code>event_type</code> or interface fields, were still present.</p>
<p>This makes exports from rebuilt data more reliable when investigating sparse or malformed-looking events.</p>

<h3>Fix HTTP Host header missing port for non-standard ports</h3>
<p><small>Mar 31, 2026</small></p>
<p>The <code>from_http</code> and <code>http</code> operators now include the port in the <code>Host</code> header
when the URL uses a non-standard port. Previously, the port was omitted, which
caused requests to fail with HTTP 403 when the server validates the <code>Host</code>
header against the full authority, such as for pre-signed URL signature
verification.</p>

<h3>Reliable recent exports during partition flushes</h3>
<p><small>Mar 30, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>export</code> command no longer fails or misses recent events when a node is flushing active partitions to disk under heavy load. Recent exports now keep the in-memory partitions they depend on alive until the snapshot completes, which preserves correctness for concurrent import and export workloads.</p>
]]></content>
        <published>2026-04-14T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.30.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-30-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-30-0"/>
        <updated>2026-03-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds OIDC web identity authentication for AWS operators, so you can assume AWS roles from external identity providers without long-lived credentials. It also speeds up logical and conditional expression evaluation and fixes several crashes and configuration diagnostics.]]></summary>
        <content type="html"><![CDATA[<p>This release adds OIDC web identity authentication for AWS operators, so you can assume AWS roles from external identity providers without long-lived credentials. It also speeds up logical and conditional expression evaluation and fixes several crashes and configuration diagnostics.</p>

<h2>Features</h2>

<h3>OIDC web identity authentication for AWS operators</h3>
<p><small>Feb 4, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5703">#5703</a></small></p>
<p>AWS operators now support OIDC-based authentication via the <code>AssumeRoleWithWebIdentity</code> API.</p>
<p>You can authenticate with AWS resources using OpenID Connect tokens from external identity providers like Azure, Google Cloud, or custom endpoints. This enables secure cross-cloud authentication without sharing long-lived AWS credentials.</p>
<p>Configure web identity authentication in any AWS operator by specifying a token source and target role:</p>
<pre><code>from_s3 "s3://bucket/path", aws_iam={
  region: "us-east-1",
  assume_role: "arn:aws:iam::123456789012:role/cross-cloud-role",
  web_identity: {
    token_file: "/path/to/oidc/token"
  }
}
</code></pre>
<p>The <code>web_identity</code> option accepts three token sources: <code>token_file</code> (path to a token file), <code>token_endpoint</code> (HTTP endpoint that returns a token), or <code>token</code> (direct token value). For HTTP endpoints, you can extract tokens from JSON responses using <code>path</code>.</p>
<p>Credentials automatically refresh before expiration, with exponential backoff retry logic for transient failures. This is especially useful for long-running pipelines that need persistent authentication.</p>

<h2>Changes</h2>

<h3>Faster evaluation of logical and conditional expressions</h3>
<p><small>Mar 30, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5954">#5954</a></small></p>
<p>Pipelines that use <code>and</code>, <code>or</code>, or <code>if</code>-<code>else</code> expressions run significantly faster in certain cases — up to <strong>30×</strong> in our benchmarks. The improvement is most noticeable in pipelines with complex filtering or branching logic. No pipeline changes are needed to benefit.</p>

<h3>OCSF 1.8.0 support in ocsf::derive</h3>
<p><small>Mar 23, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5939">#5939</a></small></p>
<p>The <code>ocsf::derive</code> operator now supports OCSF <code>1.8.0</code> events.</p>
<p>For example, you can now derive enum and sibling fields for events that declare
<code>metadata.version: "1.8.0"</code>:</p>
<pre><code class="language-tql">from {metadata: {version: "1.8.0"}, class_uid: 1007}
ocsf::derive
</code></pre>
<p>This keeps OCSF normalization pipelines working when producers emit <code>1.8.0</code>
events.</p>

<h3>Platform configuration error message</h3>
<p><small>Feb 10, 2026 · <a href="https://github.com/lava">@lava</a> · <a href="https://github.com/tenzir/tenzir/pull/5341">#5341</a></small></p>
<p>Platform configuration validation now provides clearer error messages when an invalid configuration is encountered, helping you quickly diagnose and fix configuration issues.</p>

<h2>Bug Fixes</h2>

<h3>Fix crash when connecting to unresolvable host</h3>
<p><small>Mar 26, 2026 · <a href="https://github.com/lava">@lava</a> · <a href="https://github.com/tenzir/tenzir/pull/5827">#5827</a></small></p>
<p>Setting <code>TENZIR_ENDPOINT</code> to an unresolvable hostname no longer crashes the pipeline with a segfault.</p>

<h3>Spurious warning for Other (99) enum sibling in ocsf::derive</h3>
<p><small>Mar 25, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/tenzir/pull/5949">#5949</a></small></p>
<p><code>ocsf::derive</code> no longer emits a false warning when an <code>_id</code> field is set
to <code>99</code> (Other) and the sibling string contains a source-specific value.</p>
<p>Per the OCSF specification, <code>99</code>/Other is an explicit escape hatch: the
integer signals that the value is not in the schema's enumeration and the
companion string <strong>must</strong> hold the raw value from the data source. For
example, the following is now accepted silently:</p>
<pre><code class="language-tql">from {
  metadata: { version: "1.7.0" },
  type_uid: 300201,
  class_uid: 3002,
  auth_protocol_id: 99,
  auth_protocol: "Negotiate",
}
ocsf::derive
</code></pre>
<p>Previously this produced a spurious <code>warning: found invalid value for 'auth_protocol'</code> because <code>"Negotiate"</code> is not a named enum caption.</p>

<h3>Fix crash on Azure SSL/transport errors</h3>
<p><small>Mar 24, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>The Azure Blob Storage connector now handles <code>Azure::Core::Http::TransportException</code>
(e.g., SSL certificate errors) gracefully instead of crashing. Previously, a
self-signed certificate in the certificate chain would cause an unhandled
exception and terminate the node.</p>
]]></content>
        <published>2026-03-31T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.29.4]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-29-4</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-29-4"/>
        <updated>2026-03-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release hardens container manifest publishing in GitHub Actions by switching the reusable manifest workflow to the workflow token with correctly paired registry credentials. It also avoids exposing registry secrets on the command line by using stdin-based Docker logins.]]></summary>
        <content type="html"><![CDATA[<p>This patch release hardens container manifest publishing in GitHub Actions by switching the reusable manifest workflow to the workflow token with correctly paired registry credentials. It also avoids exposing registry secrets on the command line by using stdin-based Docker logins.</p>
]]></content>
        <published>2026-03-21T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.29.3]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-29-3</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-29-3"/>
        <updated>2026-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release keeps the 5.29 line moving with a small maintenance update and validates the refreshed release automation. It ships as a clean follow-up release without additional user-facing changes.]]></summary>
        <content type="html"><![CDATA[<p>This patch release keeps the 5.29 line moving with a small maintenance update and validates the refreshed release automation. It ships as a clean follow-up release without additional user-facing changes.</p>
]]></content>
        <published>2026-03-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.29.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-29-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-29-2"/>
        <updated>2026-03-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release fixes several correctness and performance issues across parsing, querying, and storage, and completes Suricata 8 schema coverage.]]></summary>
        <content type="html"><![CDATA[<p>This patch release fixes several correctness and performance issues across parsing, querying, and storage, and completes Suricata 8 schema coverage.</p>

<h2>Features</h2>

<h3>Add store origin metadata to feather files</h3>
<p><small>Mar 17, 2026 · <a href="https://github.com/tobim">@tobim</a></small></p>
<p>Feather store files now include a <code>TENZIR:store:origin</code> key in the Arrow table
schema metadata. The value is <code>"ingest"</code> for freshly ingested data, <code>"rebuild"</code>
for partitions created by the rebuild command, and <code>"compaction"</code> for partitions
created by the compaction plugin. This allows external tooling such as <code>pyarrow</code>
to distinguish how a partition was produced.</p>

<h3>Improved Clickhouse Usability</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a>, <a href="https://github.com/codex">@codex</a>, <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/raxyte">@raxyte</a> · <a href="https://github.com/tenzir/tenzir/pull/5897">#5897</a></small></p>
<p>The <code>to_clickhouse</code> operator now supports dynamic table names via an expression
<code>table=...</code>, which must evaluate to a <code>string</code>. If the value is not a valid
table name, the events will be dropped with a warning.</p>
<p>With this change, the operator will also create a database if it does not exist.</p>
<p>The prime use-case for this are OCSF event streams:</p>
<pre><code class="language-tql">subscribe "ocsf"
ocsf::cast encode_variants=true, null_fill=true
to_clickhouse table=f"ocsf.{class_name.replace(" ","_")}", ...
</code></pre>

<h3>Install Tenzir via Homebrew on macOS</h3>
<p><small>Mar 8, 2026 · <a href="https://github.com/mavam">@mavam</a> · <a href="https://github.com/tenzir/tenzir/pull/5876">#5876</a></small></p>
<p>You can now install Tenzir on Apple Silicon macOS via Homebrew:</p>
<pre><code class="language-sh">brew tap tenzir/tenzir
brew install --cask tenzir
</code></pre>
<p>You can also install directly without tapping first:</p>
<pre><code class="language-sh">brew install --cask tenzir/tenzir/tenzir
</code></pre>
<p>The release workflow keeps the Homebrew cask in sync with the signed macOS
package so installs and uninstalls stay current across releases.</p>

<h2>Changes</h2>

<h3>Correct AWS Marketplace container image</h3>
<p><small>Mar 19, 2026 · <a href="https://github.com/lava">@lava</a> · <a href="https://github.com/tenzir/tenzir/pull/5925">#5925</a></small></p>
<p>The AWS Marketplace ECR repository <code>tenzir-node</code> was incorrectly populated with
the <code>tenzir</code> image. It now correctly ships <code>tenzir-node</code>, which runs a Tenzir
node by default.</p>
<p>If you relied on the previous behavior, you can restore it by setting <code>tenzir</code>
as a custom entrypoint in your ECS task definition.</p>

<h3>Add Suricata schema types for IKE, HTTP2, PGSQL, and Modbus</h3>
<p><small>Mar 17, 2026 · <a href="https://github.com/tobim">@tobim</a> · <a href="https://github.com/tenzir/tenzir/pull/5914">#5914</a></small></p>
<p>The bundled Suricata schema now covers the remaining event types listed in the
Suricata 8.0.3 EVE JSON format documentation: IKE (IKEv1/IKEv2), HTTP/2,
PostgreSQL, and Modbus. This completes Suricata 8 schema coverage for Tenzir.</p>

<h2>Bug Fixes</h2>

<h3>Support long syslog structured-data parameter names</h3>
<p><small>Mar 19, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>read_syslog</code> operator and <code>parse_syslog</code> function now accept RFC 5424 structured-data parameter names longer than 32 characters, which some vendors emit despite the specification limit.</p>
<p>For example, this message now parses successfully instead of being rejected:</p>
<pre><code class="language-text">&#x3C;134>1 2026-03-18T11:00:51.194137+01:00 HOSTNAME abc 9043 23003147 [F5@12276 thx_f5_for_ignoring_the_32_char_limit_in_structured_data="thx"] broken example
</code></pre>
<p>This improves interoperability with vendor syslog implementations that exceed the RFC limit for structured-data parameter names.</p>

<h3>Fix batch timeout to flush asynchronously</h3>
<p><small>Mar 14, 2026 · <a href="https://github.com/aljazerzen">@aljazerzen</a> · <a href="https://github.com/tenzir/tenzir/pull/5906">#5906</a></small></p>
<p>The batch timeout was only checked when a new event arrived, so a single event
followed by an idle stream would never be emitted. The timeout now fires
independently of upstream activity.</p>

<h3>Fix parse_winlog batch splitting</h3>
<p><small>Mar 13, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5901">#5901</a></small></p>
<p>The <code>parse_winlog</code> function could fragment output into thousands of tiny
batches due to type conflicts in <code>RenderingInfo/Keywords</code>, where events with
one <code>&#x3C;Keyword></code> emitted a string but events with multiple emitted a list.
Additionally, <code>EventData</code> with unnamed <code>&#x3C;Data></code> elements is now always emitted
as a record with <code>_0</code>, <code>_1</code>, etc. as field names instead of a list.</p>

<h3>Optimize `in` operator and fix eq/neq null semantics</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5899">#5899</a></small></p>
<p>The <code>in</code> operator for list expressions is up to 33x faster. Previously it
created and finalized entire Arrow arrays for every element comparison, causing
severe overhead for expressions like <code>EventID in [5447, 4661, ...]</code>.</p>
<p>Additionally, comparing a typed null value with <code>==</code> now returns <code>false</code> instead
of <code>null</code>, and <code>!=</code> returns <code>true</code>, fixing a correctness issue with null
handling in equality comparisons.</p>

<h3>Fix secret comparison bypass in `in` operator fast path</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5899">#5899</a></small></p>
<p>The <code>in</code> operator fast path now correctly prevents comparison of secret values.
Previously, <code>secret_value in [...]</code> would silently compare instead of returning
null with a warning, bypassing the established secret comparison policy.</p>

<h3>Fix pattern equality ignoring case-insensitive flag</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5900">#5900</a></small></p>
<p>Pattern equality checks now correctly consider the case-insensitive flag.
Previously, two patterns that differed only in case sensitivity were treated as
equal, violating the hash/equality contract.</p>

<h3>Fix over-reservation in partition_array for string/blob types</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5899">#5899</a></small></p>
<p>Splitting Arrow arrays for string and blob types no longer over-reserves memory.
Previously both output builders reserved the full input size each, using up to
twice the necessary memory.</p>
]]></content>
        <published>2026-03-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.29.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-29-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-29-1"/>
        <updated>2026-03-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes a scheduling issue introduced in v5.24.0 that could cause the node to become unresponsive when too many pipelines using detached operators were deployed simultaneously.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes a scheduling issue introduced in v5.24.0 that could cause the node to become unresponsive when too many pipelines using detached operators were deployed simultaneously.</p>

<h2>Bug Fixes</h2>

<h3>Scheduling issue with detached operators</h3>
<p><small>Mar 16, 2026 · <a href="https://github.com/lava">@lava</a> · <a href="https://github.com/tenzir/tenzir/pull/5895">#5895</a></small></p>
<p>Fixed a scheduling issue introduced in v5.24.0 that could cause the node to
become unresponsive when too many pipelines using detached operators like
<code>from_udp</code> were deployed simultaneously.</p>
]]></content>
        <published>2026-03-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.29.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-29-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-29-0"/>
        <updated>2026-03-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves log ingestion by extracting structured data from legacy syslog messages and aligning the bundled schema with Suricata 8. It also republishes the previous release after an error in the earlier release process.]]></summary>
        <content type="html"><![CDATA[<p>This release improves log ingestion by extracting structured data from legacy syslog messages and aligning the bundled schema with Suricata 8. It also republishes the previous release after an error in the earlier release process.</p>

<h2>Features</h2>

<h3>Add Suricata schema types for IKE, HTTP2, PGSQL, and Modbus</h3>
<p><small>Mar 17, 2026 · <a href="https://github.com/tobim">@tobim</a> · <a href="https://github.com/tenzir/tenzir/pull/5914">#5914</a></small></p>
<p>The bundled Suricata schema now includes types for four previously missing event types: <code>ike</code>, <code>http2</code>, <code>pgsql</code>, and <code>modbus</code>.</p>
<p>The <code>ike</code> type supports both IKEv1 and IKEv2 traffic. Version-specific fields are contained within dedicated <code>ikev1</code> and <code>ikev2</code> sub-objects, covering key exchange payloads, nonce payloads, client proposals, vendor IDs, and IKEv2 role/notify information.</p>
<p>The <code>http2</code> type models HTTP/2 request and response streams including settings frames, header lists, error codes, and stream priority.</p>
<p>The <code>pgsql</code> type covers PostgreSQL session events with full request fields (simple queries, startup parameters, SASL authentication) and response fields (row counts, command completion, parameter status).</p>
<p>The <code>modbus</code> type captures industrial Modbus protocol transactions including function codes, access types, exception responses, diagnostic subfunctions, and MEI encapsulated interface data.</p>

<h3>Extract structured data from legacy syslog content</h3>
<p><small>Mar 13, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5902">#5902</a></small></p>
<p><code>read_syslog</code> and <code>parse_syslog</code> now extract a leading RFC 5424-style
structured-data block from RFC 3164 message content.</p>
<p>This pattern occurs in practice with some VMware ESXi messages, where
components such as <code>Hostd</code> emit a legacy syslog record and prepend structured
metadata before the human-readable message text.</p>
<p>For example, this raw syslog line:</p>
<pre><code class="language-text">&#x3C;166>2026-02-11T18:01:45.587Z esxi-01.example.invalid Hostd[2099494]: [Originator@6876 sub=Vimsvc.TaskManager opID=11111111-2222-3333-4444-555555555555] Task Completed
</code></pre>
<p>now parses as:</p>
<pre><code class="language-tql">{
  facility: 20,
  severity: 6,
  timestamp: "2026-02-11T18:01:45.587Z",
  hostname: "esxi-01.example.invalid",
  app_name: "Hostd",
  process_id: "2099494",
  structured_data: {
    "Originator@6876": {
      sub: "Vimsvc.TaskManager",
      opID: "11111111-2222-3333-4444-555555555555",
    },
  },
  content: "Task Completed",
}
</code></pre>
<p>Events without extracted structured data keep the existing <code>syslog.rfc3164</code>
schema. Events with extracted structured data use
<code>syslog.rfc3164.structured</code>.</p>

<h3>Support for Suricata 8 schema</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a>, <a href="https://github.com/satta">@satta</a> · <a href="https://github.com/tenzir/tenzir/pull/5888">#5888</a></small></p>
<p>The bundled Suricata schema now aligns with Suricata 8, enabling proper parsing and representation of events from Suricata 8 deployments.</p>
<p>This update introduces support for new event types including POP3, ARP, and BitTorrent DHT, along with enhancements to existing event types. QUIC events now include <code>ja4</code> and <code>ja4s</code> fields for fingerprinting, DHCP events include <code>vendor_class_identifier</code>, and TLS certificate timestamps now use the precise <code>time</code> type instead of string representation.</p>
<p>These schema changes ensure that Tenzir can reliably ingest and process telemetry from Suricata 8 without data loss or type mismatches.</p>

<h2>Bug Fixes</h2>

<h3>Fix pipeline startup timeouts</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5893">#5893</a></small></p>
<p>In some situations, pipelines could not be successfully started, leading to
timeouts and a non-responsive node, especially during node start.</p>

<h3>Prevent where/map assertion crash on sliced list batches</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5886">#5886</a></small></p>
<p>Pipelines using chained list transforms such as <code>xs.where(...).map(...).where(...)</code> no longer trigger an internal assertion on sliced input batches.</p>

<h3>Graceful handling of Google Cloud Pub/Sub authentication errors</h3>
<p><small>Mar 9, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5877">#5877</a></small></p>
<p>Invalid Google Cloud credentials in <code>from_google_cloud_pubsub</code> no longer crash the node. Authentication errors now surface as operator diagnostics instead.</p>
]]></content>
        <published>2026-03-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.28.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-28-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-28-0"/>
        <updated>2026-03-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds support for parsing Check Point syslog structured-data dialects that deviate from RFC 5424, improving out-of-the-box interoperability with Check Point exports. It also makes DNS hostname resolution in the load_tcp operator opt-in and fixes several parser bugs related to schema changes between events.]]></summary>
        <content type="html"><![CDATA[<p>This release adds support for parsing Check Point syslog structured-data dialects that deviate from RFC 5424, improving out-of-the-box interoperability with Check Point exports. It also makes DNS hostname resolution in the load_tcp operator opt-in and fixes several parser bugs related to schema changes between events.</p>

<h2>Features</h2>

<h3>Check Point syslog structured-data dialect parsing</h3>
<p><small>Mar 2, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5851">#5851</a></small></p>
<p><code>parse_syslog()</code> and <code>read_syslog</code> now accept common Check Point structured-data variants that are not strictly RFC 5424 compliant. This includes <code>key:"value"</code> parameters, semicolon-separated parameters, and records that omit an SD-ID entirely.</p>
<p>For records without an SD-ID, Tenzir now normalizes the structured data under <code>checkpoint_2620</code>, so downstream pipelines can use a stable field path.</p>
<p>For example, the message <code>&#x3C;134>1 ... - [action:"Accept"; conn_direction:"Incoming"]</code> now parses successfully and maps to <code>structured_data.checkpoint_2620</code>. This improves interoperability with Check Point exports and reduces ingestion-time preprocessing.</p>

<h2>Changes</h2>

<h3>JSON parse error context</h3>
<p><small>Mar 6, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5805">#5805</a></small></p>
<p>JSON parsing errors now display the surrounding bytes at the error location. This
makes it easier to diagnose malformed JSON in your data pipelines.</p>
<p>For example, if your JSON is missing a closing bracket, the error message shows
you the bytes around that location and marks where the parser stopped expecting
more input.</p>

<h3>DNS hostname resolution opt-in for load_tcp operator</h3>
<p><small>Mar 4, 2026 · <a href="https://github.com/tobim">@tobim</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5865">#5865</a></small></p>
<p>The <code>load_tcp</code> operator now makes DNS hostname resolution opt-in with the <code>resolve_hostnames</code> parameter (defaults to <code>false</code>).</p>
<p>Previously, the operator always attempted reverse DNS lookups for peer endpoints, which could fail in environments without working reverse DNS configurations. Now you can enable this behavior by setting <code>resolve_hostnames</code> to <code>true</code>:</p>
<pre><code class="language-tql">load_tcp endpoint="0.0.0.0:5555" resolve_hostnames=true {
  read_json
}
</code></pre>
<p>When enabled and DNS resolution fails, the operator emits a warning diagnostic (once) instead of failing. This allows the operator to continue functioning in environments where reverse DNS is unavailable or unreliable.</p>

<h2>Bug Fixes</h2>

<h3>Uncaught exception reporting</h3>
<p><small>Mar 6, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5805">#5805</a></small></p>
<p>We improved the reporting for unexpected diagnostics outside of operator execution,
such as during startup. In these cases you will now get the diagnostic message.</p>

<h3>Parser bug fixes for schema changes</h3>
<p><small>Mar 6, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5805">#5805</a></small></p>
<p>Fixed multiple issues that could cause errors or incorrect behavior when the
schema of parsed events changes between records. This is particularly important
when ingesting data from sources that may add, remove, or modify fields over time.</p>
<p>Schema mismatch warnings for repeated fields in JSON objects (which Tenzir
interprets as lists) now include an explanatory hint, making it clearer what's
happening when a field appears multiple times where a single value was expected.</p>
]]></content>
        <published>2026-03-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.27.3]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-27-3</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-27-3"/>
        <updated>2026-03-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes a crash that could occur when reading JSON data. It also improves CEF parsing to handle non-conforming unescaped equals characters.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes a crash that could occur when reading JSON data. It also improves CEF parsing to handle non-conforming unescaped equals characters.</p>

<h2>Bug Fixes</h2>

<h3>JSON reading crash fix</h3>
<p><small>Mar 2, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5855">#5855</a></small></p>
<p>We fixed a bug that could cause a crash when reading JSON data.</p>

<h3>Fix CEF parsing for unescaped equals</h3>
<p><small>Mar 2, 2026 · <a href="https://github.com/jachris">@jachris</a> · <a href="https://github.com/tenzir/tenzir/pull/5841">#5841</a></small></p>
<p>The CEF parser now handles unescaped <code>=</code> characters (which are not conforming to
the specification) by using a heuristic.</p>
]]></content>
        <published>2026-03-03T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.27.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-27-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-27-2"/>
        <updated>2026-02-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds the hmac function for computing Hash-based Message Authentication Codes over strings and blobs. It also fixes an assertion failure in array slicing that was introduced in v5.27.0.]]></summary>
        <content type="html"><![CDATA[<p>This release adds the hmac function for computing Hash-based Message Authentication Codes over strings and blobs. It also fixes an assertion failure in array slicing that was introduced in v5.27.0.</p>

<h2>Features</h2>

<h3>Add `hmac` function</h3>
<p><small>Feb 27, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5846">#5846</a></small></p>
<p>The new experimental <code>hmac</code> function computes Hash-based Message
Authentication Codes (HMAC) for strings and blobs. It supports SHA-256
(default), SHA-512, SHA-384, SHA-1, and MD5 algorithms.</p>
<p>Note: The <code>key</code> parameter is currently a plain string because function
arguments cannot be secrets yet. We plan to change this in the future.</p>
<pre><code class="language-tql">from {
  signature: hmac("hello world", "my-secret-key"),
}
</code></pre>
<pre><code class="language-tql">{
  signature: "90eb182d8396f16d4341d582047f45c0a97d73388c5377d9ced478a2212295ad",
}
</code></pre>
<p>Specify a different algorithm with the <code>algorithm</code> parameter:</p>
<pre><code class="language-tql">from {
  signature: hmac("hello world", "my-secret-key", algorithm="sha512"),
}
</code></pre>

<h2>Bug Fixes</h2>

<h3>Fixed an assertion failure in slicing</h3>
<p><small>Feb 27, 2026 · <a href="https://github.com/IyeOnline">@IyeOnline</a> · <a href="https://github.com/tenzir/tenzir/pull/5842">#5842</a></small></p>
<p>We fixed a bug that would cause an assertion failure <em>"Index error: array slice would exceed array length"</em>.
This was introduced as part of an optimization in Tenzir Node v5.27.0.</p>
]]></content>
        <published>2026-02-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.27.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-27-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-27-1"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes an issue where the platform plugin did not correctly use the configured certfile, keyfile, and cafile options for client certificate authentication.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes an issue where the platform plugin did not correctly use the configured certfile, keyfile, and cafile options for client certificate authentication.</p>

<h2>Bug Fixes</h2>

<h3>Fix platform plugin not respecting `certfile` and `keyfile` options</h3>
<p><small>Feb 24, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>Fixed in issue where the platform plugin did not correctly use the
configured <code>certfile</code>, <code>keyfile</code> and <code>cafile</code> options for client
certificate authentication, and improved the error messages for TLS
issues during platform connection.</p>
]]></content>
        <published>2026-02-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Node v5.27.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir/v5-27-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir/v5-27-0"/>
        <updated>2026-02-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release enhances the sort function with custom comparators and descending order support, and extends the slice function to work with lists.]]></summary>
        <content type="html"><![CDATA[<p>This release enhances the sort function with custom comparators and descending order support, and extends the slice function to work with lists.</p>

<h2>Features</h2>

<h3>Slice function extended to support lists</h3>
<p><small>Feb 22, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5819">#5819</a></small></p>
<p>The <code>slice</code> function now supports <code>list</code> types in addition to <code>string</code>. You can slice lists using the same <code>begin</code>, <code>end</code>, and <code>stride</code> parameters. Negative stride values are now supported for lists, letting you reverse or step backward through list data. String slicing continues to require a positive <code>stride</code>.</p>
<p>Example usage with lists:</p>
<ul>
<li><code>[1, 2, 3, 4, 5].slice(begin=1, end=4)</code> returns <code>[2, 3, 4]</code></li>
<li><code>[1, 2, 3, 4, 5].slice(stride=-1)</code> returns the list in reverse order</li>
<li><code>[1, 2, 3, 4, 5].slice(begin=1, end=5, stride=-2)</code> returns <code>[5, 3]</code></li>
</ul>

<h3>Enhance `sort` function with `desc` and `cmp` parameters</h3>
<p><small>Feb 17, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/tenzir/pull/5767">#5767</a></small></p>
<p>The <code>sort</code> function now supports two new parameters: <code>desc</code> for controlling
sort direction and <code>cmp</code> for custom comparison logic via binary lambdas.</p>
<p><strong>Sort in descending order:</strong></p>
<pre><code class="language-tql">from {xs: [3, 1, 2]}
select ys = sort(xs, desc=true)
</code></pre>
<pre><code class="language-tql">{ys: [3, 2, 1]}
</code></pre>
<p><strong>Sort records by a specific field using a custom comparator:</strong></p>
<pre><code class="language-tql">from {xs: [{v: 2, id: "b"}, {v: 1, id: "a"}, {v: 2, id: "c"}]}
select ys = sort(xs, cmp=(left, right) => left.v &#x3C; right.v)
</code></pre>
<pre><code class="language-tql">{
  ys: [
    {v: 1, id: "a"},
    {v: 2, id: "b"},
    {v: 2, id: "c"},
  ],
}
</code></pre>
<p>The <code>cmp</code> lambda receives two elements and returns a boolean indicating whether
the first element should come before the second. Both parameters can be combined
to reverse a custom comparison.</p>

<h2>Bug Fixes</h2>

<h3>Fix `read_lines` operator for old executor</h3>
<p><small>Feb 17, 2026 · <a href="https://github.com/tobim">@tobim</a></small></p>
<p>The <code>read_lines</code> operator was accidently broken while it was ported
to the new execution API. This change restores its functionality.</p>

<h3>HTTP header values can contain colons</h3>
<p><small>Jan 28, 2026 · <a href="https://github.com/lava">@lava</a> · <a href="https://github.com/tenzir/tenzir/pull/5693">#5693</a></small></p>
<p>HTTP header values containing colons are now parsed correctly.</p>
]]></content>
        <published>2026-02-24T00:00:00.000Z</published>
    </entry>
</feed>