# Installation

> StringZilla for Java

```xml
<dependency>
  <groupId>com.github.ashvardanian</groupId>
  <artifactId>stringzilla</artifactId>
  <version>5.1.1</version>
</dependency>
```

The bindings require JDK 22+ and native access enabled at launch.

```sh
java --enable-native-access=ALL-UNNAMED ...
```

```java
import com.stringzilla.StringZilla;
import static java.nio.charset.StandardCharsets.UTF_8;

byte[] text = "the quick brown fox".getBytes(UTF_8);
long position = StringZilla.indexOf(text, "brown".getBytes(UTF_8)); // first match, as a UTF-8 byte offset
long digest = StringZilla.hash(text);                               // fast 64-bit AES hash
```

All offsets are UTF-8 byte offsets, not UTF-16 char indices.
Value operations (`hash`, `equal`, `compare`) read on-heap `byte[]` in place via `critical` downcalls, while large off-heap buffers (memory-mapped files, columnar data) are fully zero-copy via `MemorySegment`.
Buffer-filling operations write into caller-provided arrays and return a count, so steady-state usage allocates nothing.

