Home

Awesome

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:

StatusLibraryDescriptionRemarks
:white_check_mark:Clojure coreClojure core
:white_check_mark:clojure specClojure Spec
:white_check_mark:clojure/tools.loggingLogging library
:white_check_mark:clojure/tools.logging+log4jLogging library
:white_check_mark:alephWeb server
:white_check_mark:amazonica+s3Cloud API wrapper library
:white_check_mark:asamiAsami DB
:white_check_mark:aws-api+s3Cognitect AWS client library
:white_check_mark:buffyBuffy, The Byte Buffer Slayer
:white_check_mark:carmineRedis client and message queue for Clojure
:white_check_mark:cheshireJSON parser/writer
:white_check_mark:cli4cljInteractive Command Line Interfaces (CLIs) for Clojure Applications
:white_check_mark:cljfmtSource Formatter
:white_check_mark:clj-http-liteWeb client
:x:clj-sophiaA fast RAM-Disk hybrid storageRuntime error/JNA
:white_check_mark:clj-uuidRFC4122 Unique Identifiers for ClojureNo objects in namespaced uuids
:white_check_mark:clara-rulesA Clojure forward-chaining rules engineUsing AOT compiled session
:white_check_mark:clostache{{ mustache }} for Clojure
:white_check_mark:componentManaging lifecycle and dependencies of software
:white_check_mark:cpropConfiguration/property management
:white_check_mark:datascriptImmutable database and Datalog query engine
:warning:fastmathFast and primitive math and stats librarySee README
:white_check_mark:fireA lightweight clojure client for Firebase based using the REST API.
:white_check_mark:hiccupFast library for rendering HTML in Clojure
:white_check_mark:http-kitWeb server and server
:white_check_mark:integrantAlternative to mount, component etc.
:white_check_mark:laciniaA GraphQL server implementation in pure Clojure
:white_check_mark:loomA Graph manipulation and computation library.
:x:mongerAn idiomatic Clojure MongoDB driver with sane defaults
:white_check_mark:μ/logEvent logging system
:white_check_mark:next.jdbc + honeysqlDatabase driver and SQL-in-Clojure
:white_check_mark:nippyClojure serialization/deserialization library
:white_check_mark:pp-gridA text-formatting library
:white_check_mark:ring/jettyWeb server
:white_check_mark:RoaringBitmapBitset library
:white_check_mark:safelyCircuit breaker
:white_check_mark:secure-randomSecureRandom initialization
:white_check_mark:selmerA fast, Django inspired template system for Clojure.
:white_check_mark:systemLayer on top of components
:white_check_mark:tech.ml.datasetA Clojure high performance data processing system
:white_check_mark:timbrePure Clojure/Script logging library
:white_check_mark:pedestalPedestal is a sturdy and reliable base for services and APIs.
:white_check_mark:claypooleClaypoole: Threadpool tools for Clojure
:white_check_mark:upitVery very simple library to initialise your app stack.
::white_check_mark:zetasketchSketch data structures like HLLrequires reflect-config.json

More libraries to come (PRs are welcome).

Interesting GraalVM documentation to build native-images:

How to contribute

If you wish to add a library and contribute with a PR please follow these steps:

  1. Fork the project
  2. use the sample-project as a template. cp -r sample-project my-library
  3. add the library to the project.clj and the native-image parameters used
  4. amend the my-library/src/simple/main.clj to use the library
  5. amend the my-library/README.md with the info you discovered.
  6. 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)