Clojure meets GraalVM
This project contains a set of "hello world" projects to verify which Clojure libraries do actually compile and produce native images under GraalVM.
Here the instructions on how to build your own Clojure projects with GraalVM.
Here the list of libraries tested:
Status | Library | Description | Remarks |
---|---|---|---|
Clojure core | Clojure core | ||
clojure spec | Clojure Spec | ||
clojure/tools.logging | Logging library | ||
clojure/tools.logging+log4j | Logging library | ||
aleph | Web server | ||
amazonica+s3 | Cloud API wrapper library | ||
asami | Asami DB | ||
aws-api+s3 | Cognitect AWS client library | ||
buffy | Buffy, The Byte Buffer Slayer | ||
carmine | Redis client and message queue for Clojure | ||
cheshire | JSON parser/writer | ||
cli4clj | Interactive Command Line Interfaces (CLIs) for Clojure Applications | ||
cljfmt | Source Formatter | ||
clj-http-lite | Web client | ||
clj-sophia | A fast RAM-Disk hybrid storage | Runtime error/JNA | |
clj-uuid | RFC4122 Unique Identifiers for Clojure | No objects in namespaced uuids | |
clara-rules | A Clojure forward-chaining rules engine | Using AOT compiled session | |
clostache | {{ mustache }} for Clojure | ||
component | Managing lifecycle and dependencies of software | ||
cprop | Configuration/property management | ||
datascript | Immutable database and Datalog query engine | ||
fastmath | Fast and primitive math and stats library | See README | |
fire | A lightweight clojure client for Firebase based using the REST API. | ||
hiccup | Fast library for rendering HTML in Clojure | ||
http-kit | Web server and server | ||
integrant | Alternative to mount, component etc. | ||
lacinia | A GraphQL server implementation in pure Clojure | ||
loom | A Graph manipulation and computation library. | ||
monger | An idiomatic Clojure MongoDB driver with sane defaults | ||
μ/log | Event logging system | ||
next.jdbc + honeysql | Database driver and SQL-in-Clojure | ||
nippy | Clojure serialization/deserialization library | ||
pp-grid | A text-formatting library | ||
ring/jetty | Web server | ||
safely | Circuit breaker | ||
secure-random | SecureRandom initialization |
||
selmer | A fast, Django inspired template system for Clojure. | ||
system | Layer on top of components | ||
tech.ml.dataset | A Clojure high performance data processing system | ||
timbre | Pure Clojure/Script logging library | ||
pedestal | Pedestal is a sturdy and reliable base for services and APIs. | ||
claypoole | Claypoole: Threadpool tools for Clojure | ||
upit | Very very simple library to initialise your app stack. |
More libraries to come (PRs are welcome).
Interesting GraalVM documentation to build native-images:
- Understand Class Initialization in Native Image
- Native Image Build Configuration
- URL Protocols in Native Image for
http
andhttps
- JCA Security Services in Native Image
How to contribute
If you wish to add a library and contribute with a PR please follow these steps:
- Fork the project
- use the
sample-project
as a template.cp -r sample-project my-library
- add the library to the
project.clj
and the native-image parameters used - amend the
my-library/src/simple/main.clj
to use the library - amend the
my-library/README.md
with the info you discovered. - Make a PR with your findings and "Thank you" in advance.
License
Copyright © 2019-2021 Bruno Bonacci
Distributed under the Apache License v 2.0 (http://www.apache.org/licenses/LICENSE-2.0)