OSS updates of November - December 2022

In this post I'll give updates about open source I worked on during November and December 2022.

Sponsors

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!

Projects

http-client

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.

Babashka

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:

Squint and Cherry

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.

SCI

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.

Clj-kondo

Static analyzer and linter for Clojure code that sparks joy

Two new releases with many fixes and improvements. Check the changelog for details.

Some highlights:

Scittle

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.

Process

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 apply and *command-line-args*. All functions in babashka.process have been rewritten to support this syntax.

See changelog for details.

Quickdoc

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.

Fs

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 swap!.

See changelog for more details.

Neil

A CLI to add common aliases and features to deps.edn-based projects.

A NEIL_GITHUB_TOKEN can now be configured to avoid hitting the rate limit of the Github API, thanks to Russ Matney.

Quickblog

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.

Rewrite-edn

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 fnil and conj. See changelog.

Sci.configs

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.

Nbb

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.

Edamame

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.

Changelog

lein2deps

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.

Joyride

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.

Deps.clj

Regular maintainance, keeping up with the official Clojure CLI and tools jar!

Clj-kondo configs

Library configurations as dependencies for clj-kondo.

The claypoole configuration was improved.

Babashka CLI

Turn Clojure functions into CLIs!

Minor fixes. See changelog.

Babashka pods

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).

Babashka compatibility in external libs

I contributed to RCF, deep-diff2 and clj-diff to make these libraries babashka compatible.

Published: 2023-01-06

Tagged: clojure oss updates

Archive