To install YTsaurus Server 25.4.0, update the k8s-operator to version 0.27.0 or above.

YTsaurus 25.4.0 released
YTsaurus 25.4.0 has been released, introducing significant improvements, new features, and bug fixes.
Highlights
This release includes:
-
Row-Level Security (RLS) — end-to-end support. ACEs now accept an
expression, restricting access to individual rows;full_readis extended row-wise (coverscopy/concatenate/remote_copy). Wired through master, proxyread_tableand controller agent in operations; CHYT 2.18+ already supports it, SPYT 2.9.0 is required and YQL/QT — 0.4.1. -
Bulk-insert under user transaction — now general use. Introduced as experimental in 25.3 (the prerequisite for
REPLACE INTO //dynamic/tablein YQL), it is promoted to general availability in 25.4 — safe to use in production workloads. -
Authorized node expiration. Master now remembers who set
expiration_time/expiration_timeoutand, withenable_authorized_expirationon, runs the removal under that user. Prevents accidental cross-account deletions of shared subtrees and gives an auditable lifecycle for auto-expiring nodes. -
Distributed write protocol for files. Files can now be written from many client processes in parallel, the same way tables already could. Removes the single-writer bottleneck for large artifacts and enables fan-out uploads from operations and pipelines.
-
transfer_bundle_resourcescommand. Atomically moves resource quotas (tablet count, tablet static memory) between two tablet cell bundles in a single mutation, making bundle rebalancing safe for automation and the bundle controller. -
Heavy hitters for lookup queries. Dynamic tables expose raw and data-weighted heavy hitters for lookups, giving operators a first-class way to find the keys behind cache pressure, hot tablets and skewed read patterns.
-
check_operation_permissionAPI. Lets users and orchestrators ask the scheduler whether a given user has a given permission on an operation, mirroringcheck_permissionfor Cypress objects. -
list-job-tracesAPI and reworkedget_job_trace.list-job-tracesenumerates all GPU traces of a job;get_job_tracenow streams the trace in Perfetto-friendly format, so large traces open in Perfetto without conversion. -
Chunk filtration via
input_queryin path attributes. Filters chunks based on a query directly in path attributes — useful for read optimizations. -
Compressed-data-size constraints for sorted operations. Adds primary compressed-data-size limits and a
consider_only_primary_sizejob-sizing option that accounts only for the primary size when slicing jobs. -
CPU overload handling on data node. Integrates CPU overload handling into the data node; adds dynamic adjustment of pending-disk-read / pending-disk-write memory limits and the maximum session count.
-
YTQL syntax v3 — expressivity upgrades. Several long-standing limitations are lifted:
- Expressions allowed in
INandBETWEEN. - Integer index in
GROUP BY/GROUP BY KEY(GROUP BY 1, 2). - New string functions
make_ngramsandsplit. - Reads from tablet followers in
SELECTqueries. - Fetch join executed on proxy.
- Array join with lists of composite and
anyvalues.
- Expressions allowed in
Breaking changes
Please note the following changes:
-
List nodes have been completely removed. Loading a snapshot that contains list nodes will crash master-server. To ensure that no list nodes exist before the update, the following steps can be taken:
- If
alert_on_list_node_loadoption in the master dynamic config is set totrue, then validation should have produced an alert when loading from snapshot in 25.2 and a crash in 25.3. If no alerts or crashes were observed, then it should be safe to update. - Otherwise, it is advised to use the dry-run option
--validate-snapshotwith the master-server binary version 25.4 to validate that the snapshot can be loaded before updating.
- If
-
Pool tree config cleanup. Removed
enable_scheduling_tags(the feature it disabled is no longer relevant) andmax_share_ratiofrom pool config (it was used to limit guarantees pre-vector-HDRF). -
Deprecating
list_queue_consumer_registrations. Newdisallow_list_all_registrationsoption in queue consumer registration manager config; this will become the default in subsequent releases after a migration phase.
Full details and configuration examples are available in the release notes.