Releases
May 7, 2025

Quix Streams Release 3.14.0

Just shipped QuixStreams 3.14.0. The star of this release is our new concat() method. Now, you can smash multiple streams together!

Steve Rosam
Steve Rosam
Head of Content
QuixStreams 3.14, Concat All the Data

Python stream processing, simplified

Pure Python. No JVM. No wrappers. No cross-language debugging. Use streaming DataFrames and the whole Python ecosystem to build stream processing applications.

Python stream processing, simplified

Pure Python. No JVM. No wrappers. No cross-language debugging. Use streaming DataFrames and the whole Python ecosystem to build stream processing applications.

Data integration, simplified

Ingest, pre-process and load high volumes of data into any database, lake or warehouse, without overloading your systems or budgets.

The 4 Pillars of a Successful AI Strategy

Foundational strategies that leading companies use to overcome common obstacles and achieve sustained AI success.
Get the guide

Guide to the Event-Driven, Event Streaming Stack

Practical insights into event-driven technologies for developers and software architects.
Get the guide
Quix is a performant, general-purpose processing framework for streaming data. Build real-time AI applications and analytics systems in fewer lines of code using DataFrames with stateful operators and run it anywhere Python is installed.

QuixStreams 3.14 - The Pi Release: Concat All The Things!

Just shipped QuixStreams 3.14.0 and no, the version number wasn't an accident. Who doesn't love some math humor with their stream processing library?

The star of this release is our new `concat()` method. Now, you can smash multiple streams together without that awkward manual plumbing code. Combine orders from different regions, merge multiple sensors, or just fix that  branching logic you've been wrestling with:

# UK orders in GBP, German orders in EUR, but we need combined USD reporting 
orders_uk = app.dataframe(topic_uk)
orders_de = app.dataframe(topic_de)

# Convert currencies first
orders_uk["amount_usd"] = orders_uk["amount"].apply(convert_currency("GBP", "USD"))
orders_de["amount_usd"] = orders_de["amount"].apply(convert_currency("EUR", "USD"))

# Magic happens here
orders_combined = orders_uk.concat(orders_de)

New Aggregations

We've also added new aggregations - Earliest, Latest, First, and Last.

FileSource and Other Fixes

The FileSource got some dev time, and we fixed that thing where using MongoDB with None headers would make everything explode. Plus there's a shiny new InfluxDB3Source if you're in need of one.

Under the hood, we've cleaned up a bunch of internal plumbing that you probably never noticed but we were getting stressed about, plus we bumped a bunch of dependencies to take advantage of improved security and whatever.

Check out the full release notes if you want all the details!

What’s a Rich Text element?

The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.

Static and dynamic content editing

A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!

How to customize formatting for each rich text

Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.