koryki on Maven Central
2026-09-24
koryki is now available on Maven Central. Two projects are published, both licensed under Apache 2.0:
- koryki core 0.1.0 — the first public release of
the Java implementation: the transpiler that turns KQL into SQL, the dialects for eight
database engines, and the support libraries around them. Thirteen artifacts under the group
ai.koryki.core. - koryki northwind 0.1.2 — the shared test
data: the schema catalog and semantic layer of the Northwind sample database, and the database
itself for DuckDB. Two artifacts under the group
ai.koryki.northwind.
Until now, trying koryki meant cloning the repository and building it yourself. Now it is a dependency like any other.
Getting started
Add the core transpiler plus the dialect for your database. With Gradle:
dependencies {
implementation("ai.koryki.core:koryki-core:0.1.0")
implementation("ai.koryki.core:koryki-duckdb:0.1.0")
}With Maven:
<dependency>
<groupId>ai.koryki.core</groupId>
<artifactId>koryki-core</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>ai.koryki.core</groupId>
<artifactId>koryki-duckdb</artifactId>
<version>0.1.0</version>
</dependency>Each dialect brings koryki-core with it, so strictly speaking the dialect alone is enough — but
naming both makes it visible what the build depends on. Java 21 is required.
What is in the release
The language and the transpiler
koryki-core— turns KQL into SQL, by way of IQL, koryki's intermediate query language: the intermediate query model, the rewrite rules, the type system and function catalog, the validators, and a JDBC execution layer.koryki-kqlcore— the KQL grammar and the ANTLR lexer and parser generated from it.
The dialects — each renders the intermediate model as one engine's SQL and adapts its JDBC driver:
koryki-duckdbkoryki-postgresqlkoryki-oraclekoryki-snowflakekoryki-trinokoryki-mariadb(also MySQL)koryki-mssqlkoryki-sqlite
Support
koryki-northwind— ready-made services for the Northwind sample database, built on the artifacts from the northwind project below.koryki-testkit— the JUnit harness for the shared KQL/IQL fixture corpus.koryki-tools— documentation tooling and a function-catalog audit.
The northwind project
Every koryki implementation is tested against the same cases, and those cases live in a project of their own: koryki-java/northwind. Two of its modules are now published:
koryki-northwind-catalog—db.json, the physical schema, andmodel.json, the semantic layer of the test databases: which entities exist and which links between them are permitted.koryki-northwind-duckdb— the Northwind database for DuckDB: the DDL, the data scripts and the prebuiltnorthwind.duckdb.
Most projects will never name them directly — koryki-northwind in core brings both along. But
if you want to read the semantic layer in your own code, or run your own queries against the
same data koryki is tested on, they are a dependency away:
dependencies {
testImplementation("ai.koryki.northwind:koryki-northwind-catalog:0.1.2")
testRuntimeOnly("ai.koryki.northwind:koryki-northwind-duckdb:0.1.2")
}The third module, the query corpus — KQL and IQL queries with their expected SQL, results and rejections per dialect — is not published; implementations read it from a checkout of the repository.
Why the release process matters
In the previous post I argued that trust in a query should come from being able to check it, not from being told it is right. The same applies to the software that does the translating. A transpiler that sits between a domain expert and the database has to be something you can inspect and verify — so both releases were built with that in mind:
- Signed. Every artifact is signed with PGP in CI, and both projects use the same key. Its
fingerprint is stated in each repository, and
RELEASES.mdshows how to check a download against it, by hand or on every Gradle build through dependency verification. - Reproducible. Jars are built with fixed timestamps and file order, so the same commit gives the same bytes. Nothing from the build machine, such as a user name, a host or a build time, ends up in the artifacts.
- Complete. Every jar ships with sources, javadoc,
LICENSEandNOTICE, and identifies its own version in the manifest. - Open. The source is on GitHub, and the grammar and the transformation rules are documented.
What a first release means
These are 0.x versions: until 1.0, the API may still change, and not every change will be backwards compatible. If you try koryki and something does not work the way you expect — or a query renders differently from what you expected on your database — I would like to hear about it: open an issue on GitHub.
If you would rather see koryki in action before adding a dependency, the demo is still at demo.koryki.ai.