# Tenzir Node v5.0.0

## 🚀 Features

### Implement `move` operator

Apr 17, 2025 · [@raxyte](https://github.com/raxyte) · [#5117](https://github.com/tenzir/tenzir/pull/5117)

We added a new `move` operator that moves a field into another, effectively a smart renaming such as `ctx.message=status.msg` moves the values from `status.msg` into the field `message` of a record `ctx` and drops `status.msg`.

### Add optimizations for `if`

Apr 16, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5110](https://github.com/tenzir/tenzir/pull/5110)

The `mo` suffix allows for specifying durations in terms of months. For example, `3mo` returns a duration equivalent to three months. The unit has alternative spellings `month` and `months`, and is defined as one twelfth of a year.

### Add a `hidden` field to `diagnostics`

Apr 16, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5119](https://github.com/tenzir/tenzir/pull/5119)

The output of the `diagnostics` operator now includes an additional `hidden` field that is set to `true` for pipelines that are not visible on the Pipelines page of the Tenzir Platform, e.g., because they’re run under-the-hood by the platform or interactively in the Explorer.

### Fix panic in `head 0 | write_json arrays_of_objects=true`

Apr 15, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5115](https://github.com/tenzir/tenzir/pull/5115)

`write_json arrays_of_objects=true` now works correctly with an empty input, returning an empty JSON array instead of running into a panic.

### Implement `from_http`

Apr 14, 2025 · [@raxyte](https://github.com/raxyte) · [#5114](https://github.com/tenzir/tenzir/pull/5114)

`from_http <host:port>, server=true` creates an HTTP/1.1 server that listens on a specified hostname and port. In the future, the `load_http` operator’s HTTP client will be integrated with this operator as well, eventually superseding `load_http`.

## 🔧 Changes

### Add optimizations for `if`

Apr 16, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5110](https://github.com/tenzir/tenzir/pull/5110)

`1y` in TQL now equals 365.2425 days, which is the average length of a year in the Gregorian calendar. This aligns the duration literal with the `years` function and how the Tenzir Platform renders durations.

### Implement `file_content(path:string)`

Apr 9, 2025 · [@raxyte](https://github.com/raxyte) · [#5111](https://github.com/tenzir/tenzir/pull/5111)

We added a new function `file_contents` to read bytes from a file with an absolute path.

### Make TQL2 the default

Apr 8, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5086](https://github.com/tenzir/tenzir/pull/5086)

TQL2 is now the default and only option for writing pipelines with Tenzir. The environment variable `TENZIR_TQL2`, the configuration option `tenzir.tql2` have no more effect. Using the command-line option `--tql2` results in an error.

## 🐞 Bug Fixes

### Add optimizations for `if`

Apr 16, 2025 · [@dominiklohmann](https://github.com/dominiklohmann) · [#5110](https://github.com/tenzir/tenzir/pull/5110)

Operators that interact with state in the node that is not local to the pipeline, e.g., `context::update`, now properly work when used inside an `if` statement. Previously, pipelines of the form `if … { context::update … }` failed at runtime.

Branches in `if` statement no longer run on a single thread, and instead properly participate in the thread pool. This fixes performance problems when running complex pipelines inside branches. Note that this causes the output of the `if` operator to be unordered between its branches.

Literal values of type `time` in expressions failed to parse when they used subsecond prevision or a time-zone offset. This no longer happens.

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

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