11# vortex-java
22
3+ [ ![ CI] ( https://github.com/dfa1/vortex-java/actions/workflows/ci.yml/badge.svg )] ( https://github.com/dfa1/vortex-java/actions )
4+
35> ** Alpha** — not production-ready. APIs will change without notice.
46
57Pure-Java reader/writer for the [ Vortex] ( https://github.com/spiraldb/vortex ) columnar file format.
68
7- - ✅ Pure-Java reader for primitive, sequence, ALP, dict, FSST
8- - ✅ Local (mmap) or Remote (HTTPS, single read of last 65K)
9- - 🚧 Writer (in progress)
10- - 🚧 Benchmark against Rust+JNI (in progress)
11- - 🚧 Full encoding coverage (in progress)
12- - 🚧 Vectorized decode paths (Panama Vector API)
13- - ❌ No Iceberg/Spark/Flink integration yet
9+ ## Status
10+
11+ - Pure-Java reader for primitive, sequence, ALP, dict, FSST (stable)
12+ - Local (mmap) or Remote (HTTPS, single read of last 65K) (stable)
13+ - Writer: in progress
14+ - Benchmark vs Rust+JNI: in progress
15+ - Full encoding coverage: in progress
16+ - Vectorized decode paths (Panama Vector API): planned
17+ - Iceberg/Spark/Flink integration: not available yet
1418
1519## Motivation
1620
@@ -19,8 +23,7 @@ JNI bindings are fast but add deployment friction: platform-specific artifacts,
1923toolchains, and crash-domain coupling between the JVM and native code.
2024
2125This library takes a different approach — 100% Java, no JNI, no ` sun.misc.Unsafe ` .
22- It uses the Java FFM API (` MemorySegment ` / ` Arena ` , Java 22+) for zero-copy memory-mapped
23- reads, making it easier to:
26+ It uses the Java FFM API (` MemorySegment ` / ` Arena ` , Java 25+) for zero-copy memory-mapped reads, making it easier to:
2427
2528- embed in any JVM project without native-library management
2629- build and test on any platform with a standard JDK
@@ -112,6 +115,35 @@ Replacing protobuf with FlatBuffers is not viable — existing `.vortex` files p
112115implementation embed protobuf bytes in codec metadata blobs, and wire compatibility requires matching the format
113116exactly.
114117
118+ ## Quickstart
119+
120+ Add the library to your build (example, Maven):
121+
122+ ``` xml
123+ <!-- TODO: replace with released coordinates -->
124+ <dependency >
125+ <groupId >io.github.dfa1</groupId >
126+ <artifactId >vortex-java</artifactId >
127+ <version >0.0.0-SNAPSHOT</version >
128+ </dependency >
129+ ```
130+
131+ Open and read a Vortex file (illustrative API):
132+
133+ ``` java
134+ import io.github.dfa1.vortex.reader.VortexFile ;
135+ import io.github.dfa1.vortex.reader.ScanIterator ;
136+
137+ try (VortexFile vf = VortexFile . open(Path . of(" data/example.vortex" ))) {
138+ try (ScanIterator it = vf. scan()) {
139+ while (it. hasNext()) {
140+ var row = it. next();
141+ // process row
142+ }
143+ }
144+ }
145+ ```
146+
115147## Requirements
116148
117149- Java 25+
@@ -126,6 +158,8 @@ requiring it means no preview flags, no upgrade risk, and a supported LTS for us
126158
127159``` bash
128160./mvnw verify
161+ # Run tests
162+ ./mvnw test
129163```
130164
131165## License
0 commit comments