# Tenzir Node v4.29.0

## 🚀 Features

### Implement some `print_*` functions

Feb 25, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#5001](https://github.com/tenzir/tenzir/pull/5001)

The `write_xsv` family of operators now accepts multi-character separators, instead of being restricted to a single character.

We added the `write_kv` operator, allowing you to write events as Key-Value pairs.

We added the functions `any.print_json()` and `any.print_yaml()` to print any value as a JSON or YAML string.

We added the functions `record.print_kv()`, `record.print_csv()`, `record.print_ssv()`, `record.print_tsv()` and `record.print_xsv()` to print records as the respective format.

### Implement sub-duration functions

Feb 21, 2025 · [@raxyte](https://github.com/raxyte) · [#4985](https://github.com/tenzir/tenzir/pull/4985)

New functions `years`, `months`, `weeks`, `days`, `hours`, `minutes`, `seconds`, `milliseconds`, `microseconds` and `nanoseconds` convert a numeric value to the equivalent duration. Their counterpart `count_*` functions calculate how many units can the duration be broken into, i.e. `duration / unit`.

The `abs` function calculates the absolute value for a number or a duration.

### Implement `base` option for `int()` and `uint()`

Feb 20, 2025 · [@raxyte](https://github.com/raxyte) · [#5006](https://github.com/tenzir/tenzir/pull/5006)

The new `base` option for `int` and `uint` functions allows parsing hexadecimal numbers in strings.

## 🔧 Changes

### Compact NDJSON output

Feb 25, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5015](https://github.com/tenzir/tenzir/pull/5015)

The output of `write_ndjson` is now more compact and no longer includes unnecessary whitespace. Additionally, `write_json` no longer prints a trailing whitespace after each comma.

### Implement some `print_*` functions

Feb 25, 2025 · [@IyeOnline](https://github.com/IyeOnline) · [#5001](https://github.com/tenzir/tenzir/pull/5001)

The `sep` argument on the `flatten` and `unflatten` functions is now a positional argument, allowing you to simply write `record.flatten("-")`.

The `unflatten` option found on many `read_*` operators and `parse_*` functions is now called `unflatten_separator`.

The `field_sep`, `list_sep` and `null_value` options on the XSV operators and functions (such as `read_xsv`, `write_csv` or `parse_tsv`) are now named arguments on all of them and are called `field_separator`, `list_separator` and `null_value`.

The `field_split` and `list_split` arguments for the `read_kv` operator and `parse_kv` function are now named arguments.

### Allow values to be `null` when charting

Feb 20, 2025 · [@raxyte](https://github.com/raxyte) · [#5009](https://github.com/tenzir/tenzir/pull/5009)

The `chart_area`, `chart_bar`, and `chart_pie` operators no longer reject null-values. Previously, gaps in charts were only supported for `chart_line`.

## 🐞 Bug Fixes

### Fix a crash in `{parse,read}_grok` for invalid patterns

Feb 25, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5018](https://github.com/tenzir/tenzir/pull/5018)

The `read_grok` operator and `parse_grok` functions no longer crash when providing an invalid Grok expression.

### Normalize pushed-up predicates in `subscribe`

Feb 25, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5014](https://github.com/tenzir/tenzir/pull/5014)

We fixed an optimization bug that caused pipelines of the form `subscribe <topic> | where <value> in <field>` to evaluate the predicate `<field> in <value>` instead, returning incorrect results from the pipeline.

### Add to\_splunk to the ce binary packages

Feb 24, 2025 · [@tobim](https://github.com/tobim) · [#5012](https://github.com/tenzir/tenzir/pull/5012)

We now include the `to_splunk` operator in the Tenzir binary packages.

### Fix compilation error handling inside `if`

Feb 23, 2025 · [@jachris](https://github.com/jachris) · [#5011](https://github.com/tenzir/tenzir/pull/5011)

A compilation error within an `if` statement no longer causes pipelines to crash.

### Remove type layering

Feb 19, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5008](https://github.com/tenzir/tenzir/pull/5008)

We fixed a bug that caused `type_id(this)` to return inconsistent values for schemas with metadata attached, e.g., after assigning a schema name via `@name = "new_name"` or using operators like `chart_line` that add custom metadata to a schema for use of the Tenzir Platform. Unfortunately, this may cause charts or tables added to dashboards before Tenzir Platform v1.7 to break. To fix them, click on the action menu on the chart or table on the dashboard, click “Open in Explorer,” and re-add the chart or table to the dashboard. We are sorry about this inconvenience.

### Respect `--color` option in default implicit events sink

Feb 19, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5007](https://github.com/tenzir/tenzir/pull/5007)

The implicit events sink of the `tenzir` binary now respects the `--color=[always|never|auto]` option and the `NO_COLOR` environment variable. Previously, color usage was only determined based on whether `stdout` had a TTY attached.

[ Download on GitHub ](https://github.com/tenzir/tenzir/releases/tag/v4.29.0)

[Get the release artifacts and source code.](https://github.com/tenzir/tenzir/releases/tag/v4.29.0)