In this post I'll give updates about open source I worked on during September and October 2024.
To see previous OSS updates, go here.
I'd like to thank all the sponsors and contributors that make this work possible. Without you, the below projects would not be as mature or wouldn't exist or be maintained at all.
Current top tier sponsors:
Open the details section for more info about sponsoring.
Sponsor info
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!
Soon Clojurists Together will be opening their application for long term funding. If you are a member, don't forget to vote!
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
In September I visited Heart of Clojure where Christian, Teodor and I did a workshop on babashka. The first workshop was soon fully booked so we even did a second one and had a lot of fun doing so. It was so good to see familiar Clojure faces in real life again. Thanks Arne and Gaiwan team for organizing this amazing conference.
Although I didn't make it to the USA for the Clojure conj in October, Alex Miller did invite me to appear towards the end of his closing talk when he mentioned that 90% of survey respondents used babashka.
If you are interested in a full stack web framework with babashka and squint, check out borkweb.
Here are updates about the projects/libraries I've worked on in the last two months.
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- Unreleased
- #1784: detect
:redundant-do
in catch
- #2410: add
--report-level
flag - 2024.09.27
- #2404: fix regression with metadata on node in hook caused by
:redundant-ignore
linter - 2024.09.26
- #2366: new linter:
:redundant-ignore
. See docs - #2386: fix regression introduced in #2364 in
letfn
- #2389: add new
hooks-api/callstack
function - #2392: don't skip jars that were analyzed with
--skip-lint
- #2395: enum constant call warnings
- #2400:
deftype
and defrecord
constructors can be used with Type/new
- #2394: add
:sort
option to :unsorted-required-namespaces
linter to enable case-sensitive sort to match other tools - #2384: recognize
gen/fmap
var in cljs.spec.gen.alpha
- babashka: native, fast starting Clojure interpreter for scripting.
- #1752: include
java.lang.SecurityException
for java.net.http.HttpClient
support - #1748: add
clojure.core/ensure
- Upgrade to
taoensso/timbre
v6.6.0
- Upgrade to GraalVM 23
- #1743: fix new fully qualified instance method in call position with GraalVM 23
- Clojure 1.12 interop: method thunks, FI coercion, array notation (see below)
- Upgrade SCI reflector based on clojure 1.12 and remove specific workaround for
Thread/sleep
interop - Add
tools.reader.edn/read
- Fix #1741:
(taoensso.timbre/spy)
now relies on macros from taoensso.encore
previously not available in bb - Upgrade Clojure to
1.12.0
- #1722: add new clojure 1.12 vars
- #1720: include new clojure 1.12's
clojure.java.process
- #1719: add new clojure 1.12
clojure.repl.deps
namespace. Only calls with explicit versions are supported. - #1598: use Rosetta on CircleCI to build x64 images
- #1716: expose
babashka.http-client.interceptors
namespace - #1707: support
aset
on primitive array - #1676: restore compatibility with newest at-at version (1.3.58)
- Bump SCI
- Bump
fs
- Bump
process
- Bump
deps.clj
- Bump
http-client
- Bump
clj-yaml
- Bump
edamame
- Bump
rewrite-clj
- Add
java.io.LineNumberReader
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- Fix #942: improve error location of invalid destructuring
- Fix #917: support new Clojure 1.12 Java interop:
String/new
, String/.length
and Integer/parseInt
as fns - Fix #925: support new Clojure 1.12 array notation:
String/1
, byte/2
- Fix #926: Support
add-watch
on vars in CLJS - Support
aset
on primitive array using reflection - Fix #928: record constructor supports optional meta + ext map
- Fix #934:
:allow
may contain namespaced symbols - Fix #937: throw when copying non-existent namespace
- Update
sci.impl.Reflector
(used for implementing JVM interop) to match Clojure 1.12
- squint: CLJS syntax to JS compiler
- Fix watcher and compiler not overriding
squint.edn
configurations with command line options. - Allow passing
--extension
and --paths
via CLI - Fix #563: prioritize refer over core built-in
- Update
chokidar
to v4 which reduces the number of dependencies - BREAKING: Dynamic CSS in
#html
must now be explicitly passed as map literal: (let [m {:color :green}] #html [:div {:style {:& m}}])
. Fixes issue when using lit-html
in combination with classMap
. See demo - #556: fix referring to var in other namespace via global object in REPL mode
- Pass
--repl
opts to watch
subcommand in CLI - #552: fix REPL output with hyphen in ns name
- Ongoing work on browser REPL. Stay tuned.
- cherry: Experimental ClojureScript to ES6 module compiler
- Fix referring to vars in other namespaces globally
- Allow
defclass
to be referenced through other macros, e.g. as cherry.core/defclass
- Fix emitting keyword in HTML
- #138: Support
#html
literals, ported from squint
- http-client: babashka's http-client
- #68 Fix accidental URI path decoding in uri-with-query (@hxtmdev)
- #71: Link back to sources in release artifact (@lread)
- #73: Allow implicit ports when specifying the URL as a map (@lvh)
- http-server: serve static assets
- #16: support range requests (jmglov)
- #13: add an ending slash to the dir link, and don't encode the slashes (@KDr2)
- #12: Add headers to index page (rather than just file responses)
- bbin: Install any Babashka script or project with one command
- Fix #88: bbin ls with 0-length files doesn't crash
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- Add
cljs.pprint/code-dispatch
and cljs.pprint/with-pprint-dispatch
- clojurescript
- neil: A CLI to add common aliases and features to deps.edn-based projects.
- #241: ignore missing deps file (instead of throwing) in
neil new
(@bobisageek)
- sci.configs: A collection of ready to be used SCI configs.
- Added a configuration for
cljs.spec.alpha
and related namespaces
- nbb: Scripting in Clojure on Node.js using SCI
- Include
cljs.spec.alpha
, cljs.spec.gen.alpha
, cljs.spec.test.alpha
- qualify-methods
- Initial release of experimental tool to rewrite instance calls to use fully qualified methods (Clojure 1.12 only0
- clerk: Moldable Live Programming for Clojure
- Add support for
:require-cljs
which allows you to use .cljs
files for render functions - Add support for nREPL for developing render functions
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Upgrade/sync with clojure CLI v1.12.0.1479
- process: Clojure library for shelling out / spawning sub-processes
- Work has started to support prepending output (in support for babashka parallel tasks). Stay tuned.
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
- quickdoc: Quick and minimal API doc generation for Clojure
- CLI: Turn Clojure functions into CLIs!
- fs - File system utility library for Clojure
- tools: a set of bbin installable scripts
- sci.nrepl: nREPL server for SCI projects that run in the browser
- html: Html generation library inspired by squint's html tag
- rewrite-edn: Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments
- instaparse-bb: Use instaparse from babashka
- babashka.json: babashka JSON library/adapter
- tools-deps-native and tools.bbuild: use tools.deps directly from babashka
- squint-macros: a couple of macros that stand-in for applied-science/js-interop and promesa to make CLJS projects compatible with squint and/or cherry.
- grasp: Grep Clojure code using clojure.spec regexes
- lein-clj-kondo: a leiningen plugin for clj-kondo
- http-kit: Simple, high-performance event-driven HTTP client+server for Clojure.
- babashka.nrepl: The nREPL server from babashka as a library, so it can be used from other SCI-based CLIs
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- pod-babashka-fswatcher: babashka filewatcher pod
- lein2deps: leiningen to deps.edn converter
- sql pods: babashka pods for SQL databases
- cljs-showcase: Showcase CLJS libs using SCI
- babashka.book: Babashka manual
- rewrite-clj: Rewrite Clojure code and edn
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- carve - Remove unused Clojure vars
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- joyride: VSCode CLJS scripting and REPL (via SCI)
- clj2el: transpile Clojure to elisp
- deflet: make let-expressions REPL-friendly!
- deps.add-lib: Clojure 1.12's add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI
Published: 2024-11-01
Tagged:
clojure
oss updates
In this post I'll give updates about open source I worked on during July and August 2024.
To see previous OSS updates, go here.
I'd like to thank all the sponsors and contributors that make this work possible. Without you, the below projects would not be as mature or wouldn't exist or be maintained at all.
Current top tier sponsors:
Open the details section for more info about sponsoring.
Sponsor info
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
Here are updates about the projects/libraries I've worked on last month.
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- Unreleased:
- #2386: fix regression introduced in #2364 in
letfn
(unreleased) - v2024.08.29:
- #2303: Support array class notation of Clojure 1.12 (
byte/1
) - #916: New linter:
:destructured-or-binding-of-same-map
which warns about :or
defaults referring to bindings of same map, which is undefined and may result in broken behavior - #2362: turn min-version warning into lint warning
- #1603: Support Java classes in
:analyze-call
hook - #2369: false positive unused value in quoted list
- #2374: Detect misplaced return Schemas (@frenchy64)
- #2364: performance: code that analyzed fn arity is ran twice
- #2355: support
:as-alias
with current namespace without warning about self-requiring namespace - v2024.08.01:
- #2359:
@x
should warn with type error about x
not being an IDeref, e.g. with @inc
- #2345: Fix SARIF output and some enhancements (@nxvipin)
- #2335: read causes side effect, thus not an unused value
- #2336:
do
and doto
type checking (@yuhan0) - #2322: report locations for more reader errors (@yuhan0)
- #2342: report unused maps, vectors, sets, regexes, functions as
:unused-value
- #2352: type mismatch error for
or
without arguments - #2344: copying configs and linting dependencies can now be done in one go with
--dependencies --copy-configs
- #2357:
:discouraged-namespace
can have :level
per namespace
- babashka: native, fast starting Clojure interpreter for scripting.
- Mostly bumped library dependencies and improvements in SCI
- edamame: Configurable EDN/Clojure parser with location metadata
- Support new Clojure 1.12 array notation
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- Fix #923: check for duplicate keys in dynamic set or map literals
- Fix #926: Support
add-watch
on vars in CLJS
- cherry: Experimental ClojureScript to ES6 module compiler
- nbb: Scripting in Clojure on Node.js using SCI
- Bump org.babashka/cli
- Bump SCI
- quickdoc: Quick and minimal API doc generation for Clojure
- Fix #39: fix link when var is named multiple times in docstring
- http-server: serve static assets
- #13: add an ending slash to the dir link, and don't encode the slashes (@KDr2)
- #16: support range requests
- CLI: Turn Clojure functions into CLIs!
- Fix #102:
format-table
correctly pads cells containing ANSI escape codes
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Upgrade/sync with clojure CLI v1.11.4.1474
- deps.clj is now available as
clojure.exe
via the clj-msi installer and the official installation method on plain Windows!
- fs - File system utility library for Clojure
- #132: add
read-link
to resolve symbolic link, without target of link needing to exist
- tools: a set of bbin installable scripts
- Updated antq
- Added
--minimize
option to the ddiff script
- http-client: babashka's http-client
- Ensure that http-client works with Clojure 1.10 as the minimum supported Clojure version
- sci.nrepl: nREPL server for SCI projects that run in the browser
- Mostly changes to accomodate running sci.nrepl with clerk viewer functions
- clerk: Moldable Live Programming for Clojure
- Mostly worked on making viewer functions available from
.cljs
files and allow working on them via a nREPL session
- squint: CLJS syntax to JS compiler
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
- html: Html generation library inspired by squint's html tag
- neil: A CLI to add common aliases and features to deps.edn-based projects.
- rewrite-edn: Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments
- instaparse-bb: Use instaparse from babashka
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- bbin: Install any Babashka script or project with one command
- process: Clojure library for shelling out / spawning sub-processes
- babashka.json: babashka JSON library/adapter
- tools-deps-native and tools.bbuild: use tools.deps directly from babashka
- squint-macros: a couple of macros that stand-in for applied-science/js-interop and promesa to make CLJS projects compatible with squint and/or cherry.
- sci.configs: A collection of ready to be used SCI configs.
- grasp: Grep Clojure code using clojure.spec regexes
- lein-clj-kondo: a leiningen plugin for clj-kondo
- http-kit: Simple, high-performance event-driven HTTP client+server for Clojure.
- babashka.nrepl: The nREPL server from babashka as a library, so it can be used from other SCI-based CLIs
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- pod-babashka-fswatcher: babashka filewatcher pod
- lein2deps: leiningen to deps.edn converter
- sql pods: babashka pods for SQL databases
- cljs-showcase: Showcase CLJS libs using SCI
- babashka.book: Babashka manual
- rewrite-clj: Rewrite Clojure code and edn
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- carve - Remove unused Clojure vars
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- joyride: VSCode CLJS scripting and REPL (via SCI)
- clj2el: transpile Clojure to elisp
- deflet: make let-expressions REPL-friendly!
- deps.add-lib: Clojure 1.12's add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI
Published: 2024-08-30
Tagged:
clojure
oss updates
In this post I'll give updates about open source I worked on during May and June 2024.
To see previous OSS updates, go here.
I'd like to thank all the sponsors and contributors that make this work possible. Without you, the below projects would not be as mature or wouldn't exist or be maintained at all.
Current top tier sponsors:
Open the details section for more info about sponsoring.
Sponsor info
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
Here are updates about the projects/libraries I've worked on last month.
- html: Html generation library inspired by squint's html tag
- A NEW library for html generation that is both safe, performant, generates easy to understand code and works the same across CLJ and CLJS.
- babashka: native, fast starting Clojure interpreter for scripting. Released v1.3.191 with the following changes:
- Fix #1688:
use-fixtures
should add metadata to *ns*
- Fix #1692: Add support for
ITransientSet
and org.flatland/ordered-set
- Bump org.flatland/ordered to
1.15.12
. - Partially Fix #1695:
--repl
arg handling should consume only one arg (itself) (@bobisageek) - Partially Fix #1695: make
*command-line-args*
value available in the REPL (@bobisageek) - Fix #1686: do not fetch dependencies/invoke java for
version
, help
, and describe
options (@bobisageek) - #1696: add
clojure.lang.DynamicClassLoader
constructors (@bobisageek) - #1696: add
clojure.core/*source-path*
(points to the same sci var as *file*
) (@bobisageek) - #1696: add
clojure.main/with-read-known
(@bobisageek) - #1696: add
clojure.core.server/repl-read
(@bobisageek) - #1696: make the
cognitect-labs/transcriptor
library work (@bobisageek) - #1700: catch exceptions from resolving symbolic links during
bb.edn
lookup (@bobisageek) - Support
java.nio.channels.ByteChannel
+ several other related interop - Bump
nrepl/bencode
to 1.2.0
- Bump
babashka/fs
- Bump
org.babashka/http-client
to 0.4.18
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- Fix #2335: read causes side effect, thus not an unused value
- Fix #2336:
do
and doto
type checking (@yuhan0) - Fix #2322: report locations for more reader errors (@yuhan0)
- Imports were copied to
.clj-kondo/imports
but weren't pick up correctly. Thanks @frenchy64 for reporting the bug. - #2333: Add location to invalid literal syntax errors
- #2323: New linter
:redundant-str-call
which detects unnecessary str
calls. Off by default. - #2302: New linter:
:equals-expected-position
to enforce expected value to be in first (or last) position. See docs - #1035: Support SARIF output with
--config {:output {:format :sarif}}
- #2307: import configs to intermediate dir
- #2309: Report unused
for
expression - #2315: Fix regression with unused JavaScript namespace
- #2304: Report unused value in
defn
body - #2227: Allow
:flds
to be used in keys destructuring for ClojureDart - #2316: Handle ignore hint on protocol method
- #2322: Add location to warning about invalid unicode character
- #2319: Support
:discouraged-var
on global JS values, like js/fetch
- squint: CLJS syntax to JS compiler
- #536: HTML is not escaped in dynamic expression
- #537: Fix
not
: wrap argument in parens - Return interop expression in function body
- Prefer value from props map over explicit value
#html
improvements, support :&
for spreading props- #492: defclass static methods and fields
- #526: Fix export of class name with dashes
- #517: Preserve state over REPL evals
- #513: Fix
shuffle
core function random distribution and performances - #517: Fix re-definition of class with
defclass
in REPL - #522: fix
nil
#html
rendering issue
- neil: A CLI to add common aliases and features to deps.edn-based projects.
Released version 0.3.65 with the following changes:- #209: add newlines between dependencies
- #185: throw on non-existing library
- Bump
babashka.cli
- Fetch latest stable
slipset/deps-deploy
, instead of hard-coding (@vedang) - Several emacs package improvements (@agzam)
- cherry: Experimental ClojureScript to ES6 module compiler
- Fix #130: fix predefined
:aliases
for cherry.embed - Support
IDeref
, ISwap
, IReset
in deftype
- clojure-mode: Clojure/Script mode for CodeMirror 6.
- Fix #54: support slurping from within string literal
- pottery: A clojure library to interact with gettext and PO/POT files
- Contributed a few improvements to dealing with reader conditionals
- nbb: Scripting in Clojure on Node.js using SCI
- Fix
cljs.pprint/print-table
+ with-out-str
- Fixed
cljs.test/testing
macro to display strings correctly on test failure (@jaidetree)
- CLI: Turn Clojure functions into CLIs!
- Fix #98: internal options should not interfere with :restrict
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Upgrade/sync with clojure CLI v1.11.3.1463
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
- rewrite-edn: Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments
- instaparse-bb: Use instaparse from babashka
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- http-client: babashka's http-client
- bbin: Install any Babashka script or project with one command
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- fs - File system utility library for Clojure
- process: Clojure library for shelling out / spawning sub-processes
- babashka.json: babashka JSON library/adapter
- tools-deps-native and tools.bbuild: use tools.deps directly from babashka
- edamame: Configurable EDN/Clojure parser with location metadata
- http-server: serve static assets
- squint-macros: a couple of macros that stand-in for applied-science/js-interop and promesa to make CLJS projects compatible with squint and/or cherry.
- sci.configs: A collection of ready to be used SCI configs.
- grasp: Grep Clojure code using clojure.spec regexes
- lein-clj-kondo: a leiningen plugin for clj-kondo
- http-kit: Simple, high-performance event-driven HTTP client+server for Clojure.
- babashka.nrepl: The nREPL server from babashka as a library, so it can be used from other SCI-based CLIs
- jet: CLI to transform between JSON, EDN, YAML and Transit using Clojure
- quickdoc: Quick and minimal API doc generation for Clojure
- pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- pod-babashka-fswatcher: babashka filewatcher pod
- lein2deps: leiningen to deps.edn converter
- sql pods: babashka pods for SQL databases
- cljs-showcase: Showcase CLJS libs using SCI
- babashka.book: Babashka manual
- rewrite-clj: Rewrite Clojure code and edn
- pod-babashka-buddy: A pod around buddy core (Cryptographic Api for Clojure).
- gh-release-artifact: Upload artifacts to Github releases idempotently
- carve - Remove unused Clojure vars
- 4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!
- pod-babashka-lanterna: Interact with clojure-lanterna from babashka
- joyride: VSCode CLJS scripting and REPL (via SCI)
- clj2el: transpile Clojure to elisp
- deflet: make let-expressions REPL-friendly!
- deps.add-lib: Clojure 1.12's add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI
Published: 2024-06-30
Tagged:
clojure
oss updates