Apache Arrow columnar format in Zig.
Requires Zig 0.16.0+.
Docs: https://notfilippo.github.io/arrow-zig/
From a Zig project:
zig fetch --save=arrow git+https://github.com/notfilippo/arrow-zig.gitThen add the dependency module to the executable or library in build.zig:
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const arrow_dep = b.dependency("arrow", .{
.target = target,
.optimize = optimize,
});
const exe = b.addExecutable(.{
.name = "my_app",
.root_module = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
}),
});
exe.root_module.addImport("arrow", arrow_dep.module("arrow"));
b.installArtifact(exe);
}Pass .single_threaded = true to b.dependency("arrow", .{ ... }) to
disable atomic buffer refcounts for single-threaded use.
const arrow = @import("arrow");
const std = @import("std");
pub fn main() !void {
var gpa: std.heap.DebugAllocator(.{}) = .init;
defer _ = gpa.deinit();
const allocator = gpa.allocator();
var b = arrow.builder.NumericBuilder(i32).init(allocator);
defer b.deinit();
try b.append(10);
try b.appendNull();
try b.append(30);
const data = try b.finish();
defer data.deinit();
const values = try arrow.array.NumericArray(i32).fromData(data);
std.debug.print("{}\n", .{values.value(2)});
}| Area | Status | Notes |
|---|---|---|
| Data types | Complete | Core C++ type metadata, including dictionary, extension, union, run-end encoded, views, decimals, intervals |
| Array storage | Strong | ArrayData, slicing, ref counts, quick validate, full validateFull, logical null counts |
| Typed arrays | Strong | Thin views over storage for all implemented layouts, no generic dynamic Array facade |
| Builders | Good | Primitive, binary, nested, dictionary with existing dictionaries, no generic MakeBuilder |
| Schema and batches | Good | Schemas, fields, record batches, struct batch conversion |
| C Data Interface | Strong | Schema, array, record batch, and stream import/export |
| Compute, IPC, files | Missing | No compute kernels, IPC, Parquet, dataset, table, or chunked array layer yet |
Run the full local check before sending changes:
zig build ciThis runs license checks, generated docs, regular tests, single threaded tests, and nanoarrow interop tests in both thread modes.
Format and ABI details follow the Arrow Columnar Format and Arrow C Data Interface.