
Bindings to 24 Tree-sitter grammars, generated via a custom Gradle plugin, packaging native grammar binaries per target, parser integration and playground with editor, query highlighting, syntax-tree visualization.
Kotlin Multiplatform bindings to 24 Tree-sitter grammars, built on the published
KTreeSitter core (io.github.tree-sitter:ktreesitter). Grammar
bindings are generated by an in-house Gradle plugin ported from the upstream kotlin-tree-sitter plugin.
| Module | Grammar |
|---|---|
languages/agda |
tree-sitter-agda v1.3.3 |
languages/bash |
tree-sitter-bash v0.25.1 |
languages/c |
tree-sitter-c v0.24.1 |
languages/c-sharp |
tree-sitter-c-sharp v0.23.1 |
languages/cpp |
tree-sitter-cpp v0.23.4 |
languages/css |
tree-sitter-css v0.25.0 |
languages/embedded-template |
tree-sitter-embedded-template v0.25.0 |
languages/go |
tree-sitter-go v0.25.0 |
languages/haskell |
tree-sitter-haskell v0.23.1 |
languages/html |
tree-sitter-html v0.23.2 |
languages/java |
tree-sitter-java v0.23.5 |
languages/javascript |
tree-sitter-javascript v0.25.0 |
languages/json |
tree-sitter-json v0.24.8 |
languages/julia |
tree-sitter-julia v0.25.0 |
languages/ocaml |
tree-sitter-ocaml v0.23.2 (grammars/ocaml) |
languages/php |
tree-sitter-php v0.24.2 (php/src) |
languages/python |
tree-sitter-python v0.25.0 |
languages/regex |
tree-sitter-regex v0.25.0 |
languages/ruby |
tree-sitter-ruby v0.23.1 |
languages/rust |
tree-sitter-rust v0.24.0 |
languages/scala |
tree-sitter-scala v0.24.0 |
languages/tsx |
tree-sitter-typescript v0.23.2 (tsx/src) |
languages/typescript |
tree-sitter-typescript v0.23.2 (typescript/src) |
languages/verilog |
tree-sitter-verilog v1.0.3 |
Each grammar repository is pinned as a git submodule under languages/<name>/tree-sitter-<name> at the same
version tree-sitter-ng uses. tsx and typescript share the tree-sitter-typescript repository; ocaml builds the
grammars/ocaml grammar.
Every language module targets:
linuxX64, linuxArm64, mingwX64, macosX64, macosArm64, iosArm64, iosSimulatorArm64
gradle/libs.versions.toml — version catalog (Kotlin 2.3.20, AGP 9.3.1, KTreeSitter; build-logic dependencies are declared here too)build-logic/ — in-house tree-sitter-grammar plugin (grammar file generation, JNI/CMake scaffolding, cinterop
wiring) plus the tree-sitter-language convention plugin driving every languages/* moduleLanguages are published to Maven Local with com.vanniktech.maven.publish 0.37.0. Each platform is its own artifact (no merged metadata module):
./gradlew publishToMavenLocal # all modules, all platforms
./gradlew :languages:java:publishToMavenLocal # single languageCoordinates: cn.enaium.treesitter:treesitter-languages-<lang>-kmp-<platform>:<version>, with -jvm, -android,
-linuxx64, -linuxarm64, -mingwx64, -macosx64, -macosarm64, -iosarm64, -iossimulatorarm64 suffixes.
Each language module is versioned by its grammar repository tag (e.g. treesitter-languages-java-kmp-jvm:0.23.5,
treesitter-languages-bash-kmp-jvm:0.25.1, treesitter-languages-agda-kmp-jvm:1.3.3), read from the pinned
submodule tag at build time.
// build.gradle.kts
repositories { mavenLocal(); mavenCentral() }
dependencies {
implementation("io.github.tree-sitter:ktreesitter:0.25.1")
implementation("cn.enaium.treesitter:treesitter-languages-java-kmp-jvm:0.25.1")
}import io.github.treesitter.ktreesitter.Language
import io.github.treesitter.ktreesitter.Parser
import cn.enaium.treesitter.languages.java.TreeSitterJava
val language = Language(TreeSitterJava.language())
val parser = Parser(language)
val tree = parser.parse("class A { int x; }")
println(tree.rootNode.type) // program./gradlew :languages:java:jvmTest # JVM (builds JNI lib via CMake)
./gradlew :languages:java:macosArm64Test # Kotlin/Native (cinterop)
./gradlew :languages:java:compileAndroidMain # Android
./gradlew :example:run # Compose desktop playgroundRequires JDK 17+ (JDK 21 recommended), the Android SDK with NDK (see gradle.properties), and CMake for JNI builds.
Gradle 9.7 / AGP 9.3.1 / Kotlin 2.3.20.
tree-sitter-grammar plugin in build-logic/ is a port of the upstream io.github.tree-sitter.ktreesitter-plugin; the published Gradle plugin is not used.com.android.kotlin.multiplatform.library plugin has no externalNativeBuild DSL, so the Android JNI
library is compiled directly with the NDK toolchain into src/androidMain/jniLibs (arm64-v8a, armeabi-v7a, x86_64).ts_parser_parse_string_encoding; non-ASCII sources can be truncated on Kotlin/Native targets. Samples are ASCII
to avoid tripping this upstream issue (the JVM binding uses the correct UTF length).example/ is a Compose Multiplatform port of the
tree-sitter playground:
Targets: desktop (JVM), Android, iOS, macOS. Run with ./gradlew :example:run (desktop).
Note: Compose Multiplatform 1.12 publishes artifacts only for macosArm64 (native desktop), not linuxX64/mingwX64, so the example targets macosArm64/iOS plus Android/JVM.
Kotlin Multiplatform bindings to 24 Tree-sitter grammars, built on the published
KTreeSitter core (io.github.tree-sitter:ktreesitter). Grammar
bindings are generated by an in-house Gradle plugin ported from the upstream kotlin-tree-sitter plugin.
| Module | Grammar |
|---|---|
languages/agda |
tree-sitter-agda v1.3.3 |
languages/bash |
tree-sitter-bash v0.25.1 |
languages/c |
tree-sitter-c v0.24.1 |
languages/c-sharp |
tree-sitter-c-sharp v0.23.1 |
languages/cpp |
tree-sitter-cpp v0.23.4 |
languages/css |
tree-sitter-css v0.25.0 |
languages/embedded-template |
tree-sitter-embedded-template v0.25.0 |
languages/go |
tree-sitter-go v0.25.0 |
languages/haskell |
tree-sitter-haskell v0.23.1 |
languages/html |
tree-sitter-html v0.23.2 |
languages/java |
tree-sitter-java v0.23.5 |
languages/javascript |
tree-sitter-javascript v0.25.0 |
languages/json |
tree-sitter-json v0.24.8 |
languages/julia |
tree-sitter-julia v0.25.0 |
languages/ocaml |
tree-sitter-ocaml v0.23.2 (grammars/ocaml) |
languages/php |
tree-sitter-php v0.24.2 (php/src) |
languages/python |
tree-sitter-python v0.25.0 |
languages/regex |
tree-sitter-regex v0.25.0 |
languages/ruby |
tree-sitter-ruby v0.23.1 |
languages/rust |
tree-sitter-rust v0.24.0 |
languages/scala |
tree-sitter-scala v0.24.0 |
languages/tsx |
tree-sitter-typescript v0.23.2 (tsx/src) |
languages/typescript |
tree-sitter-typescript v0.23.2 (typescript/src) |
languages/verilog |
tree-sitter-verilog v1.0.3 |
Each grammar repository is pinned as a git submodule under languages/<name>/tree-sitter-<name> at the same
version tree-sitter-ng uses. tsx and typescript share the tree-sitter-typescript repository; ocaml builds the
grammars/ocaml grammar.
Every language module targets:
linuxX64, linuxArm64, mingwX64, macosX64, macosArm64, iosArm64, iosSimulatorArm64
gradle/libs.versions.toml — version catalog (Kotlin 2.3.20, AGP 9.3.1, KTreeSitter; build-logic dependencies are declared here too)build-logic/ — in-house tree-sitter-grammar plugin (grammar file generation, JNI/CMake scaffolding, cinterop
wiring) plus the tree-sitter-language convention plugin driving every languages/* moduleLanguages are published to Maven Local with com.vanniktech.maven.publish 0.37.0. Each platform is its own artifact (no merged metadata module):
./gradlew publishToMavenLocal # all modules, all platforms
./gradlew :languages:java:publishToMavenLocal # single languageCoordinates: cn.enaium.treesitter:treesitter-languages-<lang>-kmp-<platform>:<version>, with -jvm, -android,
-linuxx64, -linuxarm64, -mingwx64, -macosx64, -macosarm64, -iosarm64, -iossimulatorarm64 suffixes.
Each language module is versioned by its grammar repository tag (e.g. treesitter-languages-java-kmp-jvm:0.23.5,
treesitter-languages-bash-kmp-jvm:0.25.1, treesitter-languages-agda-kmp-jvm:1.3.3), read from the pinned
submodule tag at build time.
// build.gradle.kts
repositories { mavenLocal(); mavenCentral() }
dependencies {
implementation("io.github.tree-sitter:ktreesitter:0.25.1")
implementation("cn.enaium.treesitter:treesitter-languages-java-kmp-jvm:0.25.1")
}import io.github.treesitter.ktreesitter.Language
import io.github.treesitter.ktreesitter.Parser
import cn.enaium.treesitter.languages.java.TreeSitterJava
val language = Language(TreeSitterJava.language())
val parser = Parser(language)
val tree = parser.parse("class A { int x; }")
println(tree.rootNode.type) // program./gradlew :languages:java:jvmTest # JVM (builds JNI lib via CMake)
./gradlew :languages:java:macosArm64Test # Kotlin/Native (cinterop)
./gradlew :languages:java:compileAndroidMain # Android
./gradlew :example:run # Compose desktop playgroundRequires JDK 17+ (JDK 21 recommended), the Android SDK with NDK (see gradle.properties), and CMake for JNI builds.
Gradle 9.7 / AGP 9.3.1 / Kotlin 2.3.20.
tree-sitter-grammar plugin in build-logic/ is a port of the upstream io.github.tree-sitter.ktreesitter-plugin; the published Gradle plugin is not used.com.android.kotlin.multiplatform.library plugin has no externalNativeBuild DSL, so the Android JNI
library is compiled directly with the NDK toolchain into src/androidMain/jniLibs (arm64-v8a, armeabi-v7a, x86_64).ts_parser_parse_string_encoding; non-ASCII sources can be truncated on Kotlin/Native targets. Samples are ASCII
to avoid tripping this upstream issue (the JVM binding uses the correct UTF length).example/ is a Compose Multiplatform port of the
tree-sitter playground:
Targets: desktop (JVM), Android, iOS, macOS. Run with ./gradlew :example:run (desktop).
Note: Compose Multiplatform 1.12 publishes artifacts only for macosArm64 (native desktop), not linuxX64/mingwX64, so the example targets macosArm64/iOS plus Android/JVM.