In this post I'll give updates about open source I worked on during November and December 2022.
But first off, I'd like to thank all the sponsors and contributors that make this work possible! Top sponsors:
If you want to ensure that the projects I work on are sustainably maintained, you can sponsor this work via the following organizations. Thank you!
The new babashka http-client aims to become default HTTP client solution in babashka.
Babashka has several built-in options for making HTTP requests, including:
In addition, it allows to use several libraries to be used as a dependency:
The built-in clients come with their own trade-offs. E.g. babashka.curl shells out to
curl which on Windows requires your local
curl to be updated. Http-kit buffers the entire response in memory. Using
java.net.http directly can be a bit verbose.
Babashka's http-client aims to be a good default for most scripting use cases and is built on top of
java.net.http and can be used as a dependency-free JVM library as well. The API is mostly compatible with babashka.curl so it can be used as a drop-in replacement. The other built-in solutions will not be removed any time soon.
Native, fast starting Clojure interpreter for scripting.
I had the honor to write a guest blog post for the GraalVM blog about babashka. You can read it here.
Daniel Higginbotham from Brave Clojure wrote Babashka Babooka which I helped reviewing.
I also wrote a blog on how to test babashka scripts.
Versions 1.0.165 - 1.0.169 were released. Visit the changelog for details. Highlights:
(process opts? & args)syntax everywhere
Squint and cherry are two flavors of the same CLJS compiler.
Squint is a CLJS syntax to JS compiler for use case where you want to write JS, but do it using CLJS syntax and tooling instead. Cherry comes with the CLJS standard library and is as such much closer to the normal ClojureScript, but the minimal amount of JS is a little bigger.
The video of the talk I did on ClojureDays 2022 came online!
In the past two months, I've been restructuring code between squint and cherry: a bit boring but necessary to keep going forward. Along with some minor bugfixes and features, one new JSX feature landed: you can pass a props map using a new notation inspired by helix.
You can read details in the changelog.
Configurable Clojure interpreter suitable for scripting and Clojure DSLs.
This is the workhorse that powers babashka, nbb, Joyride, and many other projects.
Many improvements have happened over the last two months, both in Clojure compatibility and performance. JS and JVM interop has become up to 5x faster. All of these changes benefit babashka, nbb, joyride, etc.
See changelog for more details.
Static analyzer and linter for Clojure code that sparks joy
Two new releases with many fixes and improvements. Check the changelog for details.
(def x :foo) (inc x)will now give a warning
:dynamic-var-not-earmuffed. See docs.
:duplicate-field-namelinter for deftype and defrecord definitions.
Execute Clojure(Script) directly from browser script tags via SCI. See it in action.
Version 0.4.11 introduced the re-frame plugin. You can play around with it in the playground here. Several other releases were made. Details in the changelog.
Clojure library for shelling out / spawning subprocesses
This library traditionally had the syntax:
(process [ & cmd-args ] ?opts) but in practice, it turned out that having the syntax
(process ?opts & cmd-args) is more convenient, since you can use it with
*command-line-args*. All functions in
babashka.process have been rewritten to support this syntax.
See changelog for details.
Quickdoc is a tool to generate documentation from namespace/var analysis done by clj-kondo. It's fast and spits out an
API.md file in the root of your project, so you can immediately view it on Github. Minor fixes and improvements were made.
File system utility library for Clojure.
Fs has gotten one new function:
update-file, that alters the contents of a (text) file using a function. The function is reminiscent of
See changelog for more details.
A CLI to add common aliases and features to
NEIL_GITHUB_TOKEN can now be configured to avoid hitting the rate limit of the Github API, thanks to Russ Matney.
Light-weight static blog engine for Clojure and babashka.
The blog you're currently reading is made with quickblog.
Version 0.1.0 was finally released with much thanks to Josh Glover. See changelog for more details.
Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments.
Minor fixes and enhancements. Several functions have been added like
conj. See changelog.
A collection of ready to be used SCI configs for e.g. Reagent, Promesa, Re-frame and other projects that are used in nbb, joyride, scittle, etc. See recent commits for what's been improved.
Scripting in Clojure on Node.js using SCI
Because it's so easy to deploy to npm, I usually publish a new version for each issue that is resolved.
No big changes, but many small bugfixes and improvements in the last two months. See changelog.
Configurable EDN/Clojure parser with location metadata. It has been stable for a while and reached version 1.0.0. The API is exposed now in babashka and nbb as well.
Lein to deps.edn converter
This tool can convert a
project.edn file to a
deps.edn file. It even supports Java compilation and evaluation of code within
project.clj. Several minor enhancements were made. See changelog.
Modify VSCode by executing ClojureScript (SCI) code in your REPL and/or run scripts via keyboard shortcuts.
I'm working on this project together with Peter Strömberg (known for his work on Calva) and I'm mostly reviewing Peter's PR instead of writing code.
Read the changelog here.
Regular maintainance, keeping up with the official Clojure CLI and tools jar!
Library configurations as dependencies for clj-kondo.
The claypoole configuration was improved.
Turn Clojure functions into CLIs!
Minor fixes. See changelog.
The pods library contains the code that supports using pods in babashka and the JVM. A critical error was fixed that would hang babashka and a new JVM release was pushed to Clojars (v0.1.0).
I contributed to RCF, deep-diff2 and clj-diff to make these libraries babashka compatible.
Discuss this post here.
Tagged: clojure oss updates