Roadmap
This page sketches the larger pieces of work on VecRuntime's horizon. It is a direction, not a commitment or a schedule: items land as they are designed, measured and proven not to regress the benchmarks. Smaller work is tracked in the issue tracker; this page is for the themes big enough to shape the engine.
Deeper integration with Project Panama
VecRuntime is already built on the JDK's Foreign Function & Memory API: our
columnar vectors are off-heap MemorySegments, the native boundary is crossed
through the Panama FFM machinery rather than legacy JNI, and the hot per-batch
kernels already use the Vector API (Panama's SIMD layer) for explicit
vectorization. The roadmap is to lean further into
OpenJDK Project Panama as it matures:
- Track the FFM API as it stabilizes across JDK releases and adopt the improvements that reduce the cost of the native boundary.
- Deepen our Vector API use and tune it as newer JDK releases ship — widen the set of kernels that run on explicit SIMD, and re-tune lane widths, masks and shapes against each release's codegen so the engine keeps pace with the Vector API as it moves toward a stable (non-incubator) form.
- Keep allocation, arena lifecycle and the segment accessors aligned with where Panama is going, so the engine benefits from the platform's work rather than working around it.
Arrow memory on the new foreign-memory model (FFM)
Apache Arrow's Java library historically manages off-heap memory through its own
allocator built on Unsafe/DirectByteBuffer. The direction here is to have
Arrow's buffers sit directly on the FFM MemorySegment model — the same
foreign-memory foundation VecRuntime already uses — so there is one memory model
end to end, with no copy or wrapper at the Arrow boundary and a single place that
accounts off-heap bytes.
This depends on upstream work in the Arrow project: we are waiting on the relevant pull request landing in Apache Arrow before we can adopt it. Until then, VecRuntime bridges between its FFM segments and Arrow's allocator at the edges; once Arrow exposes a first-class FFM-backed allocator, we move to it and retire the bridge.
More input formats: JSON, CSV, ORC and Avro
The native scan today targets Parquet (reader and writer). The roadmap is to widen the engine's reach to the other formats data lakes commonly hold, so more of a query runs on the vectorized path instead of falling back:
- JSON and CSV — text formats where, as DuckDB's async-I/O work shows, the scan is dominated by I/O and parsing throughput; strong candidates for the vectorized, overlapped-I/O treatment the Parquet scan already gets.
- ORC and Avro — the other columnar/row binary formats common in
existing lakes, read into the same
VectorBuffersthe rest of the engine consumes, so a table in any of these formats benefits from the native operators without a per-format rewrite.
Each format is added behind the same contract as the Parquet reader: results must match Spark's row for row (or fall back cleanly), proven against a conformance corpus, with no regression on the benchmark suite.
Have a use case that should shape the roadmap? Please open an issue.