In this post I'll give updates about open source I worked on during May 2023.
To see previous OSS updates, go here.
Babashka-conf is happening June 10th in Berlin. Only a few tickets left!
Sponsors
I'd like to thank all the sponsors and contributors that make this work possible! Open the details section for more info.
Sponsor info
Top sponsors:
If you want to ensure that the projects I work on are sustainably maintained, you can sponsor this work in the following ways. Thank you!
If you're used to sponsoring through some other means which isn't listed above, please get in touch.
On to the projects that I've been working on!
Updates
The following projects had updates in the last month. Note that only highlights are mentioned and not a full overview of all changes. See the project's changelogs for all changes.
- Preparations for babashka conf are in full swing and I'm preparing a talk with the title 'Growing an ecosystem'.
- This month I've had the honor to visit the JUXT 10 year anniversary in London and met a lot of fellow Clojurians over there.
- Babashka and SCI will be featured at the last iteration of Strange Loop!
- My OSS work is funded by Clojurists Together in Q2
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- Version 2023.05.18 - 2023.05.26 were released. Full changelogs here. Highlights:
- Linter
:uninitialized-var
moved from default :level :off
to :warning
- #2065: new linter
:equals-true
: suggest using (true? x)
over (= true x)
(defaults to :level :off
). - #2066: new linters
:plus-one
and :minus-one
: suggest using (inc x)
over (+ x 1)
(and similarly for dec
and -
, defaults to :level :off
) - #2058: warn about
#()
and #""
in .edn
files
- babashka: native, fast starting Clojure interpreter for scripting.
- Released 1.3.180, mostly a maintenance release
- See the complete CHANGELOG
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- #58: build system for creating scittle distribution with custom libraries. See plugins/demo.
- Use
window.location.hostname
for WebSocket connection instead of hardcoding "localhost"
(@pyrmont) - Upgrade
sci.configs
to "33bd51e53700b224b4cb5bda59eb21b62f962745"
- Update nREPL implementation: implement
eldoc
(info
, lookup
) (@benjamin-asdf)
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Introduce all new programmatic API
- Automatically use file when exceeding Windows argument length
- deps.add-lib: Clojure 1.12's add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI
- nbb: Scripting in Clojure on Node.js using SCI
- Nbb is now compatible with bun. To run nbb in a bun project, use
bunx --bun nbb
.
- squint: CLJS syntax to JS compiler
- cherry Experimental ClojureScript to ES6 module compiler
- http-client: Babashka's http-client
- Add
:authenticator
option
- sci.configs: A collection of ready to be used SCI configs.
- This project now has a configuration for datascript, for anyone who wants to use SCI together with datascript. See this commit.
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- process: Clojure library for shelling out / spawning sub-processes
- Support
:pre-start-fn
in exec
- Allow passing
:cmd
in map argument - Better testing for
exec
by @lread
- fs - File system utility library for Clojure
:paths
argument for fs/which
by @lread- Support inputstream in
fs/copy
- Add
fs/owner
to return owner of file
Other projects
These are (some of the) other projects I'm involved with but little to no activity happened in the past month.
Click for more details
- edamame: Configurable EDN/Clojure parser with location metadata
- Improvements for reading namespaced maps
- babashka.book: Babashka manual
- Several corrections
- Dynamic
:exec-args
- Script-adjacent
bb.edn
docs
- CLI: Turn Clojure functions into CLIs!
- Support
--no-option
and parse as {:option false}
- Support grouped aliase like
-ome
as {:o true, :m true, :e true}
- pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- Better error message when connection is not a string
- instaparse-bb
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- Add option to elide commas
- quickdoc: Quick and minimal API doc generation for Clojure
- rewrite-clj: Rewrite Clojure code and edn
- sql pods: babashka pods for SQL databases
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- neil: A CLI to add common aliases and features to deps.edn-based projects
- cljs-showcase: Showcase CLJS libs using SCI
- carve - Remove unused Clojure vars
- grasp: Grep Clojure code using clojure.spec regexes
- quickblog: Light-weight static blog engine for Clojure and babashka
- lein2deps: leiningen to deps.edn converter
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- pod-babashka-fswatcher: babashka filewatcher pod
- joyride: VSCode CLJS scripting and REPL (via SCI)
- clj2el: transpile Clojure to elisp
- deflet: make let-expressions REPL-friendly!
- babashka.json: babashka JSON library/adapter
Published: 2023-05-30
Tagged:
clojure
oss updates
In this post I'll give updates about open source I worked on during April 2023.
To see previous OSS updates, go here.
Babashka-conf is happening June 10th in Berlin. Save the date and/or submit your babashka/clojure-related talk or workshop in the CfP!
Sponsors
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 in the following ways. Thank you!
If you're used to sponsoring through some other means which isn't listed above, please get in touch.
On to the projects that I've been working on!
Projects
The following projects had updates in the last month. Note that only highlights are mentioned and not a full overview of all changes. See the project's changelogs for all changes.
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- #1196: show language context in
.cljc
files with :output {:langs true}
. See docs. - #2030: Add a new
:discouraged-tag
linter for discouraged tag literals. See the docs. - #2058: warn about
#()
and #""
in `.edn files
- babashka: native, fast starting Clojure interpreter for scripting
- Released 1.3.177 - 1.3.179
- #1541: respect
bb.edn
adjacent to invoked file. This eases writing system-global scripts from projects without using bbin. See docs. - See the complete CHANGELOG.
- cherry Experimental ClojureScript to ES6 module compiler
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- Better error message when trying to
recur
across try
- Improvement for error locations in multiple threads
- edamame: Configurable EDN/Clojure parser with location metadata
- Improvements for reading namespaced maps
- babashka.book: Babashka manual
- Several corrections
- Dynamic
:exec-args
- Script-adjacent
bb.edn
docs
- CLI: Turn Clojure functions into CLIs!
- Support
--no-option
and parse as {:option false}
- Support grouped aliase like
-ome
as {:o true, :m true, :e true}
- http-client: Babashka's http-client
- Support
java.net.URI
directly in :uri
option - Better
:ssl-config
option support - Better
:proxy
option support
- pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- Better error message when connection is not a string
- nbb: Scripting in Clojure on Node.js using SCI
- Fix
:local/root
deps in nbb.edn
when not invoking from current working directory - Fix regression,
cljs.core/PersistentQueue.EMPTY
no longer working
- instaparse-bb
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- Add option to elide commas
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Catch up with clojure CLI changes
Contributions to other projects
Other projects
These are (some of the) other projects I'm involved with but little to no activity happened in the past month.
- process: Clojure library for shelling out / spawning sub-processes
- quickdoc: Quick and minimal API doc generation for Clojure
- rewrite-clj: Rewrite Clojure code and edn
- sql pods: babashka pods for SQL databases
- squint: CLJS syntax to JS compiler
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- neil: A CLI to add common aliases and features to deps.edn-based projects
- cljs-showcase: Showcase CLJS libs using SCI
- carve - Remove unused Clojure vars
- grasp: Grep Clojure code using clojure.spec regexes
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- quickblog: Light-weight static blog engine for Clojure and babashka
- sci.configs: A collection of ready to be used SCI configs
- lein2deps: leiningen to deps.edn converter
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- fs - File system utility library for Clojure
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- pod-babashka-fswatcher: babashka filewatcher pod
- joyride: VSCode CLJS scripting and REPL (via SCI)
- clj2el: transpile Clojure to elisp
- deflet: make let-expressions REPL-friendly!
- babashka.json: babashka JSON library/adapter
Published: 2023-04-30
Tagged:
clojure
oss updates
In this post I'll give updates about open source I worked on during March 2023.
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 in the following ways. Thank you!
If you're used to sponsoring through some other means which isn't listed above, please get in touch.
On to the projects that I've been working on!
Experimental ClojureScript to ES6 module compiler
This month I've been preparing cherry as a compiler that you can embed in your existing CLJS / shadow-cljs applications. This makes cherry an additional alternative to SCI and self-hosted CLJS.
Read about embedding cherry into your application here.
I've been working on several PRs to include cherry as an additional evaluator in:
- clerk
- malli
- One project that is still unpublished but will be coming soon!
The Small Clojure Interpreter (SCI) integrated with emacs as a loadable module.
This is a new project by Jack Rusher and I've helped him with the SCI integration.
Transpile clojure to elisp. A brand new project to transpile Clojure to Elisp. It might be of value for those who know Clojure better than Elisp and want to have something to get started. It's far from complete. Try it in the playground here.
Make let-expressions REPL-friendly!
The deflet
macro lets your write inline-def expressions, while expanding those to regular let expressions, giving you the benefits of REPL-driven development without polluting production code with top level vars.
Native, fast starting Clojure interpreter for scripting
New release: 1.3.175 (2023-03-18)), 1.3.176 (2023-03-18)
Highlights:
The clojure.core.async/go
macro now uses virtual threads.
Many small fixes and upgrades.
See the complete CHANGELOG.
This is a JSON abstraction library that you can include in babashka and JVM projects while also including your own favorite JSON implementation. The idea is that babashka libraries can include this, while JVM projects don't have to switch their JSON implementation to cheshire.core.
Babashka compatibility in external libs
I worked together with the maintainers of the following libraries to make them compatible with babashka:
- martian: HTTP abstraction library for Clojure/script, supporting OpenAPI, Swagger, Schema, re-frame and more
Static analyzer and linter for Clojure code that sparks joy
New release: 2023.03.17
Some highlights:
- #2010: Support inline macro configuration. See docs
- #2010: Short syntax to disable linters:
{:ignore [:unresolved-symbol]}
or {:ignore true}
, valid in ns-metadata, :config-in-ns
, :config-in-call
- #2009: new
:var-same-name-except-case
linter: warn when vars have names that differ only in case (important for AOT compilation and case-insensitive filesystems) - #1269: warn on
:jvm-opts
in top level of deps.edn
- #2003: detect invalid arity call for function passed to
update
, update-in
, swap!
, swap-vals!
, send
, send-off
, and send-via
Check the
changelog for details.
Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
New release: 0.7.39 (2023-03-07)
- #874: Keyword arguments as map support for CLJS
See changelog for more.
Contributions to other projects
Brief mentions
The following projects also got updates, mostly in the form of maintenance and performance improvements. This post would get too long if I had to go into detail about them, so I'll briefly mention them in random order:
- CLI: Turn Clojure functions into CLIs!
- quickdoc: Quick and minimal API doc generation for Clojure
- rewrite-clj: Rewrite Clojure code and edn
- sql pods: babashka pods for SQL databases
- squint: CLJS syntax to JS compiler
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- edamame: Configurable EDN/Clojure parser with location metadata
- Nbb: Scripting in Clojure on Node.js using SCI
- neil: A CLI to add common aliases and features to deps.edn-based projects
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- http-client: Babashka's http-client
Other projects
These are (some of the) other projects I'm involved with but little to no activity happened in the past month.
- cljs-showcase: Showcase CLJS libs using SCI
- carve - Remove unused Clojure vars
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- grasp: Grep Clojure code using clojure.spec regexes
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- quickblog: Light-weight static blog engine for Clojure and babashka
- sci.configs: A collection of ready to be used SCI configs
- lein2deps: leiningen to deps.edn converter
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- instaparse-bb
- fs - File system utility library for Clojure
- process: Clojure library for shelling out / spawning sub-processes
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- joyride: VSCode CLJS scripting and REPL (via SCI)
Published: 2023-04-07
Tagged:
clojure
oss updates