toArrowIpc() writes the Arrow IPC streaming format (or the file format, a.k.a. Feather v2) and
fromArrowIpc() reads both. The bytes are what apache-arrow's tableFromIPC, DuckDB(-Wasm)'s
insertArrowFromIPCStream, pyarrow's ipc.open_stream / open_file, Polars' read_ipc_stream / read_ipc
and pandas' read_feather consume, and what they produce is what this reader takes. No dependency: the
FlatBuffers encoding of the Schema / RecordBatch / DictionaryBatch messages is small enough to write by hand
(the reference-style back-to-front builder below) and the interop suite pins it against apache-arrow.
Type mapping (columna → Arrow): f64 → Float64, f32 → Float32, i32 → Int32, u32 → UInt32, bool → Bool,
utf8 → Utf8, category → Dictionary<Int32, Utf8>, datetime → Timestamp(MILLISECOND).
Arrow → columna additionally accepts Int8/16/64 and UInt8/16/64 (64-bit → f64, exact below 2^53),
Float16 (→ f32), LargeUtf8 and Utf8View (the string layout Polars ≥ 1.0 and DuckDB emit), Timestamp in any
unit and Date32/Date64 (→ datetime, milliseconds), Null (→ all-null f64) and dictionary-encoded strings with
any index width. Nested, decimal, binary, interval
and compressed batches are refused with the field name in the error rather than decoded wrongly.
Apache Arrow IPC — the real thing, not
ArrowLike.toArrowIpc()writes the Arrow IPC streaming format (or the file format, a.k.a. Feather v2) andfromArrowIpc()reads both. The bytes are whatapache-arrow'stableFromIPC, DuckDB(-Wasm)'sinsertArrowFromIPCStream, pyarrow'sipc.open_stream / open_file, Polars'read_ipc_stream / read_ipcand pandas'read_featherconsume, and what they produce is what this reader takes. No dependency: the FlatBuffers encoding of the Schema / RecordBatch / DictionaryBatch messages is small enough to write by hand (the reference-style back-to-front builder below) and the interop suite pins it againstapache-arrow.Type mapping (columna → Arrow): f64 → Float64, f32 → Float32, i32 → Int32, u32 → UInt32, bool → Bool, utf8 → Utf8, category → Dictionary<Int32, Utf8>, datetime → Timestamp(MILLISECOND). Arrow → columna additionally accepts Int8/16/64 and UInt8/16/64 (64-bit → f64, exact below 2^53), Float16 (→ f32), LargeUtf8 and Utf8View (the string layout Polars ≥ 1.0 and DuckDB emit), Timestamp in any unit and Date32/Date64 (→ datetime, milliseconds), Null (→ all-null f64) and dictionary-encoded strings with any index width. Nested, decimal, binary, interval and compressed batches are refused with the field name in the error rather than decoded wrongly.