Documentation
Release notes
What changed in each release, newest first. Every docs page names the release it describes.
1.1.17
Changes since 1.1.16.
Before you install
- Variants are removed, with the page that described them. A text parameter now runs one pipeline against many sources, and a clone covers another connection. A pipeline's variants and their bookmarks are not carried over, and a schedule that ran a variant is paused so that it does not start running something else. Two Live runs of a pipeline may now overlap when a text parameter they both use has different values.
- The Python Script node is removed, with its runner image and the
pythoncompose profile. A saved pipeline that uses it no longer runs: replace that step first. Moving from Python shows how, including how to call code no node covers. - Paste
compose.yamlagain from the install page, and drop,pythonfromCOMPOSE_PROFILESin.env. Then rundocker compose up -d --remove-orphansonce, which removes the old Python runner container. - The file inputs no longer move or delete the files they read. If a saved S3, Azure Blob, Google Cloud Storage or SFTP input moved or deleted its files after a run, add a File Action for that; the old setting is not carried over.
New nodes
- Network Share Files and Network Share File read and write files on a Windows or Samba share (SMB), with a user name and password, and every session signed.
- File Action copies, moves or deletes the files an input, List Files or File from URL hands it, before the pipeline reads them, after it succeeds, or after it fails. A copy inside one store stays on the store; between stores it is streamed and checked, and arrives whole or not at all.
Building pipelines
- Every expression box is a code editor, with highlighting, completion for columns and functions, and an expand button that opens it beside the column list and the function reference. This covers Filter, Formula, Formula Multi-Field, Formula Multi-Row, Route, Data Validation, Dynamic Select and Dynamic Rename.
- Formula Multi-Row has a running mode.
_previs the previous row's result, so a running balance, a capped total or a smoothed value is one expression, and optional group columns start it again for each group. - The five file inputs, List Files and File from URL have a second anchor, Files, which hands their files to a File Action.
- Bookmark is a switch in each file input's Read section: the input reads only files no successful run has read.
- List Files can list only the files older than a number of days.
Large files
- Uploads to S3, Azure Blob and Google Cloud Storage size their parts to the file, so a file far past 100 GB uploads; one too large for the store is refused before it starts. A failed or cancelled upload is cleaned up.
- A download that is cut resumes from the byte it reached, and is refused if the file changed in the meantime.
- SFTP downloads keep pace on a distant link, with many reads in flight at once.
- Moving a file over 5 GB within S3 works, and a move within Azure Blob waits for the copy to finish before it deletes the original.
Fixed
- A Sort, Summarize or Formula Multi-Row that received no rows passed no columns on, so a Union after it refused the other inputs' rows.
- Every node now checks for Cancel before it takes its next batch.
1.1.16
Changes since 1.1.15, which was published on 6 October 2026.
Before you install
- 1.1.16 is for new installs. It starts from a single new database schema, so a database created by 1.1.15 or earlier does not start under it.
New nodes
- Database Lookup looks up each row's keys in a database table and adds the matching row's columns. The database pairs the keys with the rows, so its own collation decides what matches.
- File from URL reads one file from a web link (CSV, JSON, Parquet, Excel or XML), downloaded by the server.
Building pipelines
- Every database node has a SQL editor: highlighting in the database's own dialect, completion for keywords, tables, columns and
${…}parameters, and the database's answer under the box when a query will not run. Expand it into a SQL Studio with the schema's tables, the parameters you can use, and Run to here. - The Python Studio completes column names, and gains Run to here and a Rows tab.
- A node you have just dropped on the canvas says what it still needs in plain words.
- Excel is a format on the S3, Azure Blob, Google Cloud Storage and SFTP file outputs, and every Excel file is written in constant memory.
Runs and servers
- A Test run no longer waits behind a long production run. Every server runs one Test run beside its production run, in a small slice of memory of its own.
- Every run has a time limit: 12 hours by default (Settings → General), or one set on the pipeline. A run past its limit ends Failed, so the failure alert fires. A Test run's limit is 15 minutes.
- A scheduled job never overlaps itself. A schedule that comes due while its last run is still going skips that time.
- Choose which server runs what. Give servers tags in Settings → Servers and name a tag on a pipeline, or keep Staging and Production runs on servers of their own.
- Cancel always stops a run. A node stuck inside one long call, such as a query waiting on a lock, is stopped 60 seconds after the run is cancelled.
Databases
- Bookmarks for database sources. The Postgres, MySQL, SQL Server, Redshift, Trino and ClickHouse inputs can read only the rows past where the last successful run stopped.
- All or nothing, a switch on the Postgres, Redshift, SQL Server, MySQL, Trino and MongoDB outputs. On, a load that fails leaves the table as it was. Each output's default is what it did before.
- Fixed: when a run was cancelled, or another branch failed, an output could still finish its load. Postgres and Redshift could commit part of one, and the warehouse, Iceberg and Send Email outputs could send theirs. Every output that writes outside Trinium now checks the run immediately before anything permanent.
- Fixed: a MongoDB upsert row with no key value could replace a document the pipeline never wrote. Such a row is now refused, by its row number, before anything in its batch is written.
- Fixed: a Redshift upsert doubled a key repeated within one batch. The last row for each key now wins.
Files and APIs
- A REST connection's credentials go only to its own host. A request to any other host is refused, and a redirect to another host carries none of them.
- A REST request that only reads is retried after a dropped connection or a busy server. A request that may already have arrived is never sent twice.
- Fixed: in API Lookup, a value holding a quote, a line break or a backslash could break the request body, or silently change it. Values are now always valid JSON, and a row whose body still is not valid follows the node's "On error" setting.
- A delivery to SFTP or cloud storage that fails part way names the files that arrived and the ones that did not, and "Replace the folder" removes the old files only after every new one has arrived.
- A Live SFTP read waits for a file to stop changing, up to 5 minutes by default, and skips by name a file that is still being written. The next run reads it whole.
- A watched folder that cannot be listed sends an alert after 3 checks in a row.
Security and the images
- Both images are built on Docker Hardened Images, and nothing in either runs as root. A folder or key file Trinium cannot read stops the start with the command that fixes it.
- The Python runner moves to Python 3.13.
- Only the server that serves the web creates the master key and changes the database. A worker without the key refuses to start and says where to copy it from.