The Vortex IPC format is a lightweight framing layer for transferring compressed Vortex arrays between processes or over a network connection. It is used by the Scan API for remote interchange and by any component that needs to send or receive arrays without writing a fullDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/vortex-data/vortex/llms.txt
Use this file to discover all available pages before exploring further.
.vortex file.
Relationship to the file format
The IPC format and the file format share the same underlying array and dtype serialization (FlatBuffers), but serve different purposes:| File format | IPC format | |
|---|---|---|
| Primary use | Persistent on-disk storage | Streaming transfer over a connection |
| Random access | Yes, via layout segments | No — messages are consumed in order |
| Footer / postscript | Required | Not present |
| Framing | Magic bytes + postscript length | Per-message length prefix |
| Schema transmission | dtype segment in postscript | DTypeMessage in the stream |
Message structure
Every IPC message consists of a FlatBuffer-serializedMessage header followed by an optional binary body. The Message table is defined in vortex-flatbuffers/flatbuffers/vortex-serde/message.fbs:
body_size field gives the byte length of the binary body that immediately follows the FlatBuffer header in the stream. A body_size of zero means no body follows.
Message types
ArrayMessage — compressed array transfer
ArrayMessage — compressed array transfer
An Each
ArrayMessage indicates that the body contains a FlatBuffer-serialized Array followed by one or more raw data buffers.row_countis the number of logical rows in the array.encodingsis the list of encoding identifiers referenced by the array nodes. These are globally unique string IDs resolved against the Vortex registry at read-time.
Array FlatBuffer is followed by the raw buffer data described by the Array.buffers field.Buffer struct describes padding, alignment, compression, and byte length for the corresponding raw buffer in the body. Buffers within the IPC body support None and LZ4 compression.DTypeMessage — schema transmission
DTypeMessage — schema transmission
A The
DTypeMessage indicates that the body contains a FlatBuffer-serialized DType. This message is sent before any ArrayMessage to communicate the schema of the arrays that follow.DTypeMessage table carries no additional fields; the schema is entirely in the body. See DType Serialization Format for the DType FlatBuffer schema.BufferMessage — raw byte buffers
BufferMessage — raw byte buffers
A The
BufferMessage indicates that the body contains a plain byte buffer, not a structured array.alignment_exponent field specifies the required alignment of the buffer as a power of two (alignment = 2^alignment_exponent).Streaming semantics
Messages are written and read sequentially. A typical stream begins with aDTypeMessage to establish the schema, followed by one or more ArrayMessage messages carrying chunks of the array. The stream ends when the underlying connection is closed or an application-level sentinel is reached.
There is no end-of-stream message in the current protocol (MessageVersion::V0). Readers detect end-of-stream from the transport layer (e.g., EOF on a socket or channel close).
The current message version is
V0. The version field in Message is reserved for future protocol evolution.Usage in practice
The IPC format is used internally by the Vortex Scan API when transferring arrays between a data source and an execution engine over a local or remote channel. It is also the wire format used when Vortex arrays are exchanged between language runtimes (for example, between Rust and Python via the Python bindings). Because the IPC format carries full encoding metadata in eachArrayMessage, a receiver can reconstruct the compressed array in memory without any additional context beyond the preceding DTypeMessage.