Files
jlibghostty/README.md
Gregor Lohaus be0c0bb321 wip
2026-05-27 14:04:26 +02:00

76 lines
1.5 KiB
Markdown

# jlibghostty
Java FFM bindings for Ghostty's `libghostty-vt`.
This targets Java 22+ and uses `java.lang.foreign`, not JNI. The public API is intentionally small while Ghostty's C API is still marked unstable upstream.
## Build
```sh
nix build
```
The default Nix package builds:
- `share/java/jlibghostty-0.1.0-SNAPSHOT.jar`
- `maven/dev/jlibghostty/jlibghostty/0.1.0-SNAPSHOT/...`
The jar contains the host platform `libghostty-vt` under `dev/jlibghostty/native/<platform>/`.
## Gradle Consumer
After `nix build`, another Gradle project can consume the generated Maven repository:
```kotlin
repositories {
maven {
url = uri("/home/anon/Dev/jlibghostty/result/maven")
}
}
dependencies {
implementation("dev.jlibghostty:jlibghostty:0.1.0-SNAPSHOT")
}
tasks.withType<JavaExec>().configureEach {
jvmArgs("--enable-native-access=ALL-UNNAMED")
}
```
If the app runs on the module path, use:
```sh
--enable-native-access=dev.jlibghostty
```
## External Native Library
The library normally loads the bundled native `libghostty-vt`. To override it:
```sh
java -Djlibghostty.library.path=/path/to/libghostty-vt.so ...
```
or set:
```sh
export JLIBGHOSTTY_LIBRARY=/path/to/libghostty-vt.so
```
## Example
```java
try (Terminal terminal = Ghostty.open(TerminalOptions.of(80, 24))) {
terminal.write("hello\r\n");
System.out.println(terminal.snapshot());
}
```
## Development Shell
```sh
nix develop
```
The shell provides Java, Gradle, and `JLIBGHOSTTY_LIBRARY` pointing at the Nix-built `libghostty-vt`.