Current section
Files
Jump to
Current section
Files
lib/arrow.ex
# SPDX-FileCopyrightText: 2026 Lars Wikman
#
# SPDX-License-Identifier: Apache-2.0
#
defmodule Arrow do
@moduledoc """
Pure-Elixir implementation of the [Apache Arrow](https://arrow.apache.org/)
columnar format.
This top-level module is intentionally thin. The library's surface area lives
under:
- `Arrow.Schema`, `Arrow.Field`, `Arrow.Type.*` — schema description.
- `Arrow.Array.*` — per-type columnar arrays.
- `Arrow.RecordBatch` — schema + columns batch.
- `Arrow.Buffer` — encoder/decoder between in-memory arrays and the on-wire
buffer layout.
- `Arrow.Json` — Arrow integration test JSON form, used for
cross-implementation conformance.
## Example
Encode a record batch to the IPC streaming format and decode it back:
iex> schema = %Arrow.Schema{
...> fields: [%Arrow.Field{name: "id", type: %Arrow.Type.Int{bit_width: 32, signed: true}}]
...> }
iex> batch = %Arrow.RecordBatch{
...> schema: schema,
...> length: 3,
...> columns: [
...> %Arrow.Array.Int32{
...> length: 3,
...> null_count: 0,
...> values: Arrow.Buffer.pack_primitive([1, 2, 3], :int32)
...> }
...> ]
...> }
iex> stream = Arrow.Ipc.Stream.encode(schema, [batch])
iex> {:ok, %{batches: [decoded]}} = Arrow.Ipc.Stream.decode(stream)
iex> Arrow.Logical.to_list(hd(decoded.columns))
[1, 2, 3]
"""
end