{"id":21658624,"url":"https://github.com/dylibso/chicory","last_synced_at":"2025-05-15T02:09:00.579Z","repository":{"id":206127769,"uuid":"692584821","full_name":"dylibso/chicory","owner":"dylibso","description":"Native JVM WebAssembly runtime","archived":false,"fork":false,"pushed_at":"2025-05-13T10:59:14.000Z","size":42678,"stargazers_count":840,"open_issues_count":35,"forks_count":53,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-05-13T11:43:48.770Z","etag":null,"topics":["java","wasm","webassembly","webassembly-runtime"],"latest_commit_sha":null,"homepage":"https://chicory.dev","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dylibso.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-16T23:55:05.000Z","updated_at":"2025-05-13T10:59:16.000Z","dependencies_parsed_at":"2024-03-29T10:44:59.412Z","dependency_job_id":"5df2f0bb-28b5-49ad-a2aa-ecb5f5221b5d","html_url":"https://github.com/dylibso/chicory","commit_stats":{"total_commits":813,"total_committers":24,"mean_commits":33.875,"dds":0.7072570725707257,"last_synced_commit":"b6041103ef670a42d42ad5a446ddfa49e754b58f"},"previous_names":["dylibso/chicory"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylibso%2Fchicory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylibso%2Fchicory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylibso%2Fchicory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dylibso%2Fchicory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dylibso","download_url":"https://codeload.github.com/dylibso/chicory/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254259384,"owners_count":22040820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","wasm","webassembly","webassembly-runtime"],"created_at":"2024-11-25T09:29:34.919Z","updated_at":"2025-05-15T02:08:55.553Z","avatar_url":"https://github.com/dylibso.png","language":"Java","readme":"# Chicory\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg width=\"200\" src=\"chicory1.png\"\u003e\n  \u003c/picture\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://chicory.dev/\"\u003eWebsite\u003c/a\u003e |\n  \u003ca href=\"https://chicory.dev/docs/#getting-started\"\u003eGetting started\u003c/a\u003e |\n  \u003ca href=\"https://chicory.dev/blog\"\u003eBlog\u003c/a\u003e |\n  \u003ca href=\"/CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n\n[![Interpreter Test Results](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-interpreter.svg)](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-interpreter.svg)\n[![AOT Test Results](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-aot.svg)](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-aot.svg)\n[![WASI Test Results](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-wasi.svg)](https://gist.githubusercontent.com/andreaTP/69354d1cc6cf23e4c3c4a9a8daf7ea15/raw/badge-wasi.svg)\n\n[![Zulip](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://chicory.zulipchat.com/join/g4gqsxoys6orfxlrk6hn4cyp/)\n\nChicory is a JVM native WebAssembly runtime. It allows you to run WebAssembly programs with\nzero native dependencies or JNI. Chicory can run Wasm anywhere that the JVM can go. It is designed with\nsimplicity and safety in mind. See the [development section](#development) for a better idea of what we are trying to achieve and why.\n\n\u003e *Reach out to us*: let us know what you are building with Chicory.\n\u003e [Join our team Zulip chat with this invite link](https://chicory.zulipchat.com/join/g4gqsxoys6orfxlrk6hn4cyp/).\n\nGet started now with the [official documentation](https://chicory.dev/docs/)\n\n## Why?\n\nThere are a number of mature Wasm runtimes to choose from to execute a Wasm module.\nTo name a few [v8](https://v8.dev/), [wasmtime](https://wasmtime.dev/), [wasmer](https://wasmer.io/), [wasmedge](https://wasmedge.org/), [wazero](https://wazero.io/) etc.\n\nAlthough these can be great choices for running a Wasm application, embedding them into your existing\nJava application has some downsides. Because these runtimes are written in C/C++/Rust/etc, they must be distributed\nand run as native code. This causes two main friction points:\n\n### 1. Distribution\n\nIf you're distributing a Java library (jar, war, etc), you must now distribute along with it a native object targeting the correct\narchitecture and operating system. This matrix can become quite large. This eliminates a lot of the simplicity and original benefit of shipping Java code.\n\n### 2. Runtime\n\nAt runtime, you must use FFI to execute the module. While there might be performance benefits to doing this for some modules,\nwhen you do, you're effectively escaping the safety and observability of the JVM. Having a pure JVM runtime means all your\nsecurity and memory guarantees, and your tools, can stay in place.\n\n## Goals\n\n* Be as safe as possible\n  * In that we are willing to sacrifice things like performance for safety and simplicity\n* Make it easy to run Wasm in any JVM environment without native code, including very restrictive environments.\n* Fully support the core Wasm spec\n* Make integration with Java (and other host languages) easy and idiomatic.\n\n## Non-Goals:\n\n* Be a standalone runtime\n* Be the fastest runtime\n* Be the right choice for every JVM project\n\n## Roadmap\n\nChicory development was started in September 2023. The following are the milestones we're aiming for. These\nare subject to change but represent our best guesses with current information. These are not necessarily sequential\nand some may be happening in parallel. Unless specified, any unchecked box is still not planned or started.\nIf you have an interest in working on any of these please reach out in Zulip!\n\n### 2023\n\n* [x] Wasm binary parser\n* [x] Simple bytecode interpreter\n* [x] Establish basic coding and testing patterns\n* [x] Generate JUnit tests from wasm test suite\n\n### 2024\n\n* [x] Make all tests green with the interpreter (important for correctness)\n* [x] Implement validation logic (important for safety)\n* [x] Draft of the v1.0 API (important for stability and dx)\n* [x] Decouple interpreter and create separate compiler and interpreter \"engines\"\n* [x] Proof of concept AOT compiler (run some subset of modules)\n* [x] AOT engine passes all the same specs as interpreter (stretch goal)\n* [x] WASIp1 Support (including test gen)\n  * [Read more details in the documentation](https://chicory.dev/docs/usage/wasi/)\n\n### 2025\n\n* [x] SIMD Support\n  * in the interpreter\n* [x] Tail Call\n  * in the interpreter\n\n### Proposals and Specs\n\n* [ ] Exception Handling\n* [ ] Multi-Memory Support\n* [ ] GC Support\n* [ ] Threads Support\n\n## On the press\n\n- [Chicory: A Zero Dependency Wasm Runtime for the JVM](https://www.javaadvent.com/2023/12/chicory-wasm-jvm.html) on [Java Advent 2023](https://www.javaadvent.com/2023/12)\n- [Chicory - a WebAssembly Interpreter Written Purely in Java with Zero Native Dependencies](https://www.infoq.com/news/2024/05/chicory-wasm-java-interpreter/) on [InfoQ](https://www.infoq.com)\n- [Chicory: Write to WebAssembly, Overcome JVM Shortcomings](https://thenewstack.io/chicory-write-to-webassembly-overcome-jvm-shortcomings/) on [The New Stack](https://thenewstack.io)\n- [Meet Chicory, exploit the power of WebAssembly on the server side! by Andrea Peruffo](https://www.youtube.com/watch?v=7a1yrDSh9rA) (Devoxx BE 2024)\n- [WebAssembly, the Safer Alternative to Integrating Native Code in Java](https://www.infoq.com/articles/sqlite-java-integration-webassembly/) on [InfoQ](https://www.infoq.com)\n- [Chicory: Creating a Language-Native Wasm Runtime by Benjamin Eckel / Andrea Peruffo](https://www.youtube.com/watch?v=00LYdZS0YlI) (Wasm I/O 2024)\n- [Chicory, a JVM Native WebAssembly Runtime by Benjamin Eckel](https://youtu.be/acF_cJ70n04?si=jpMAfAmjl5UaEWWa) (Dylibso Insiders)\n\n## Prior Art\n\n* [asmble](https://github.com/cretz/asmble)\n* [kwasm](https://github.com/jasonwyatt/KWasm)\n* [wazero](https://wazero.io/)\n\n## Who uses Chicory?\n\n* [sqlite4j - Pure Java SQLite JDBC driver](https://github.com/roastedroot/sqlite4j)\n* [Debezium - Pluggable Go Single Message Transformations](https://github.com/debezium/debezium)\n* [OPA - Open Policy Agent - WebAssembly Java SDK](https://github.com/StyraInc/opa-java-wasm)\n* [Trino - Python user-defined functions](https://trino.io/docs/current/udf/python.html) [(Trino plugin source)](https://github.com/trinodb/trino/tree/master/plugin/trino-functions-python) [(Python host source)](https://github.com/trinodb/trino-wasm-python)\n","funding_links":[],"categories":["Java","\u003ca name=\"Java\"\u003e\u003c/a\u003eJava"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdylibso%2Fchicory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdylibso%2Fchicory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdylibso%2Fchicory/lists"}