---
title: "RUAL Core v15.0.1 - Development Release · RUAL Documentation"
description: "Latest development release"
canonical: https://docs.rual.nl/core-versions/150001
language: en
---

[Cluster](https://docs.rual.nl/cluster)

[Blocks](https://docs.rual.nl/block-types)

[Interfaces](https://docs.rual.nl/interfaces)

[Blueprints](https://docs.rual.nl/blueprints)

[Tutorials](https://docs.rual.nl/tutorials)

[Home automation](https://docs.rual.nl/home-automation)

[Examples](https://docs.rual.nl/examples)

[Reference](https://docs.rual.nl/reference)

[Architecture](https://docs.rual.nl/architecture)

[Troubleshooting](https://docs.rual.nl/troubleshooting)

Other

# RUAL Core v15.0.1

Our platform operates on software, commonly known as `core`. This software can be run either locally within the cloud environment of Enterprise Customers or within our AWS cluster.

> **Development Release v15.0.1** This is the latest, **development** release. The documentation and notes of this release is still under development , blocks listed on this pages may change in the final release.

> **Reading these notes** Upgrading? Read the notes for every version between yours and the target, watch for warning callouts at the top (breaking changes), and check the deprecated list against your blueprints via **Deprecated Actions** in RUAL Studio. The full upgrade routine is in [Version Management](https://docs.rual.nl/architecture/version-guide); deprecated blocks keep working: their block page names the successor when one exists.

### Modified or newly introduced blocks

In this release **9** new blocks were introduced. You'll find a complete list of blocks at the bottom of this page.

### Files publish atomically

RUAL Core 15.0.1 is a storage-integrity release. Every file a blueprint writes is now **published atomically**: the block writes into a private temporary file, flushes it to storage, and only then renames it into place. A URL served from entity storage returns either the complete file or nothing: never a half-written image, a truncated download, or bytes that only existed in a cache. This holds even for the common chat-feed case where viewers open an attachment the instant it is posted.

### Every file-writing block

The guarantee covers the whole file family: [`file_create`](https://docs.rual.nl/block-types/file%20modification/file_create) and [`file_copy`](https://docs.rual.nl/block-types/file%20modification/file_copy), image outputs from [`function_resize_image`](https://docs.rual.nl/block-types/image/function_resize_image), [`function_image_to_webp`](https://docs.rual.nl/block-types/images/function_image_to_webp) and the image-composition blocks, spreadsheet exports, [`function_base64_to_file`](https://docs.rual.nl/block-types/encoding/function_base64_to_file), EDI and SEPA documents, and [`function_zip`](https://docs.rual.nl/block-types/zip/function_zip) / [`function_unzip`](https://docs.rual.nl/block-types/zip/function_unzip). A block that fails mid-way (an image that cannot be encoded, an archive entry over its size budget, an interrupted write) no longer leaves a partial file at the destination: the destination keeps whatever it held before, and the temporary is cleaned up.

### Uploads become visible only when complete

When [`function_save_file_from_form`](https://docs.rual.nl/block-types/file%20form/function_save_file_from_form) moves an uploaded file into its public location, the data is now flushed to storage *before* the public name appears. Previously the name could become servable while the bytes still sat in the writing node's cache, which made the very first viewers of a freshly posted attachment wait multiple seconds, or receive an incomplete file, while storage reconciled reader and writer. Resized variants written next to their source are covered by the same rule.

### Re-uploading assets is safe

Uploading an asset under a name that already exists no longer risks the existing asset. A re-upload that fails (too large, empty, malformed, or interrupted) keeps the previous file *and* its asset record fully intact; an empty upload no longer truncates a valid asset in place. The old record is superseded only after the replacement file is completely written, immediately before the new record is created.

## Block changes in detail

> **Generated from the block catalog** Exact block changes in this release so far, generated from the block catalog. This release is still in development; entries appear here as they land.

- [set cache control `file`](https://docs.rual.nl/block-types/files/file_cache_control): New block: Changes how a PUBLISHED public-media file may be cached, on object storage and at the edge, without re-uploading it. Give `no-store` for media that must never be kept anywhere but its origin : a one-time photo the moment its message becomes one-time : or `public, max-age=31536000, immutable` to make it cacheable again. The resized variants of the file (`{name}_{w}x{h}.{ext}`, as resize image writes them, named after the file's `filename` as well as its path) are re-tagged with it. Only files in the trees the media mirror serves; a file outside them answers `NOT_MIRRORED`, a file that never reached the store `OBJECT_MISSING`.

- [delete object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_delete_object): New block: Removes an object. Deleting a key that is not there is not an error.

- [get object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_get_object): New block: Downloads an object to a file. The object is streamed to disk, so a large file costs no extra memory.

- [object exists `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_head_object): New block: Checks whether an object exists and reads its size, type and metadata : without downloading it.

- [list objects `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_list_objects): New block: Lists one page of a bucket's objects under a prefix. Feed **next page token** back into **page token** to walk a large bucket.

- [open connection `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_open): New block: Opens a connection to S3-compatible object storage (Ceph RGW, MinIO, Amazon S3). Point it at an **object storage service provider** so the secret key stays in the provider store and never appears in this blueprint : the key pins are the older way and leave the secret readable to anyone who can open the flow.

- [presign get url `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_presign_get): New block: Creates a temporary URL that lets anyone read one private object, without proxying it through this server. Not available in a simulation : the URL is a real credential.

- [presign put url `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_presign_put): New block: Creates a temporary URL that lets a browser upload one object directly to storage, without the file passing through this server. Not available in a simulation : the URL is a real credential.

- [put object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_put_object): New block: Uploads a file to object storage. The file is streamed from disk, so an object of any size costs the same memory.

- [put value `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_put_value): New block: Uploads a value as an object : JSON, rendered text, or any payload the flow computed rather than read from disk.

## Blocks introduced

- [delete object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_delete_object): Removes an object. Deleting a key that is not there is not an error.

- [get object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_get_object): Downloads an object to a file. The object is streamed to disk, so a large file costs no extra memory.

- [list objects `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_list_objects): Lists one page of a bucket's objects under a prefix. Feed **next page token** back into **page token** to walk a large bucket.

- [object exists `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_head_object): Checks whether an object exists and reads its size, type and metadata : without downloading it.

- [open connection `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_open): Opens a connection to S3-compatible object storage (Ceph RGW, MinIO, Amazon S3). Point it at an **object storage service provider** so the secret key stays in the provider store and never appears in this blueprint : the key pins are the older way and leave the secret readable to anyone who can open the flow.

- [presign get url `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_presign_get): Creates a temporary URL that lets anyone read one private object, without proxying it through this server. Not available in a simulation : the URL is a real credential.

- [presign put url `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_presign_put): Creates a temporary URL that lets a browser upload one object directly to storage, without the file passing through this server. Not available in a simulation : the URL is a real credential.

- [put object `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_put_object): Uploads a file to object storage. The file is streamed from disk, so an object of any size costs the same memory.

- [put value `s3connection`](https://docs.rual.nl/block-types/object%20storage/s3connection_put_value): Uploads a value as an object : JSON, rendered text, or any payload the flow computed rather than read from disk.

Was this page helpful? [Tell us what to improve](https://docs.rual.nl/support) · RUAL Docs is an integral component of the [RUAL ecosystem](https://rual.nl)
