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
In this post I'll give updates about open source I worked on during March and April 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.
- squint: CLJS syntax to JS compiler
- #509: Optimization: use arrow fn for implicit IIFE when possible
- Optimization: emit
const
in let expressions, which esbuild optimizes better - Don't wrap arrow function in parens, see this issue
- Fix #499: add support for emitting arrow functions with
^:=>
metadata - Fix #505: Support
:rename
in :require
- Fix #490: render css maps in html mode
- Fix #502: allow method names in
defclass
to override squint built-ins - Fix #496: don't wrap strings in another set of quotes
- Fix rendering of attribute expressions in HTML (should be wrapped in quotes)
- Compile destructured function args to JS destructuring when annotated with
^:js
. This benefits working with vitest and playwright. - #481: BREAKING, squint no longer automatically copies all non-compiled files to the
:output-dir
. This behavior is now explicit with :copy-resources
, see docs. - Add new
#html
reader for producing HTML literals using hiccup. See docs and playground example. - #483: Fix operator precedence problem
- 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)
- clj-kondo: static analyzer and linter for Clojure code that sparks joy.
Released 2024.03.13- Fix memory usage regression introduced in 2024.03.05
- #2299: Add documentation for
:java-static-field-call
. - #1732: new linter:
:shadowed-fn-param
which warns on using the same parameter name twice, as in (fn [x x])
- #2276: New Clojure 1.12 array notation (
String*
) may occur outside of metadata - #2278:
bigint
in CLJS is a known symbol in extend-type
- #2288: fix static method analysis and suppressing
:java-static-field-call
locally - #2293: fix false positive static field call for
(Thread/interrupted)
- #2296: publish multi-arch Docker images (including linux aarch64)
- #2295: lint case test symbols in list
Unreleased changed: - #1035: Support SARIF output with
--config {:output {:format :sarif}}
- #2309: report unused for expression
- #2135: fix regression with unused JavaScript namespace
- #2302: New linter:
:equals-expected-position
to enforce expected value to be in first (or last) position. See docs - #2304: Report unused value in
defn
body
- CLI: Turn Clojure functions into CLIs!
Released version 0.8.58-59- Fix #96: prevent false defaults from being removed/ignored
- Fix #91: keyword options and hyphen options should not mix
- Fix #89: long option never represents alias
- rewrite-edn: Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments
Released 0.4.8 with the following update:- Add newline after adding new element to top level map with
assoc-in
- nbb: Scripting in Clojure on Node.js using SCI
- nbb bundle JS output will ignore
nbb.edn
- #351: Update bun docs/example.
- Add
cljs.core/exists?
- clojure-mode: Clojure/Script mode for CodeMirror 6.
- instaparse-bb: Use instaparse from babashka
- Serialize regexes in parse results
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
Released v0.6.17- #77: make dependency on browser (
js/document
) optional so scittle can run in webworkers, Node.js, etc. - #69: executing script tag with src + whitespace doesn't work
- #72: add clojure 1.11 functions like
update-vals
- #75: Support reader conditionals in source code
- cherry: Experimental ClojureScript to ES6 module compiler
- #127: fix duplicate
cherry-cljs
property in package.json
which caused issues with some bundlers - Bump squint common compiler code
- clerk
- #646 Fix parsing + location issue which fixes compatibility with honey.sql
- http-client: babashka's http-client
Released 0.4.17-19- #55: allow
:body
be java.net.http.HttpRequest$BodyPublisher
- Support a Clojure function as
:client
option, mostly useful for testing - #49: add
::oauth-token
interceptor - #52: document
:throw
option
- bbin: Install any Babashka script or project with one command
These fixes have been made by @rads: - SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- Fix #626: add
cljs.core/exists?
- Fix #919: :js-libs + refer + rename clashes with core var
- Fix #906:
merge-opts
loses :features
or previous context
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Fix Windows issue related to relative paths (which took me all day, argh!)
- fs - File system utility library for Clojure
- #122:
fs/copy-tree
: fix copying read-only directories with children (@sohalt) - #127: Inconsistent documentation for the
:posix-file-permissions
options (@teodorlu)
- babashka: native, fast starting Clojure interpreter for scripting.
- Fix #1679: bump timbre and fix wrapping
timbre/log!
- Add
java.util.concurrent.CountDownLatch
- Add
java.lang.ThreadLocal
- Bump versions of included libraries
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
Published: 2024-04-30
Tagged:
clojure
oss updates
In this post I'll give updates about open source I worked on during January and February 2024.
To see previous OSS updates, go here.
I'd like to thank all the sponsors and contributors that make this work possible. Like you can read on Bozhidar
Batsov's blog these aren't the easiest times for Open Source sponsored software. I have no reason to complain, but I did see a similar drop in sponsoring in the last year. I'm thankful for those who sponsored my projects in the past and even more for those who keep doing so!
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. Released 2024.02.12
- #2276: New Clojure 1.12 array notation (
String*
) may occur outside of metadata - #2278:
bigint
in CLJS is a known symbol in extend-type
- #2288: fix static method analysis and suppressing
:java-static-field-call
locally - #2293: fix false positive static field call for
(Thread/interrupted)
- #2093: publish multi-arch Docker images (including linux aarch64)
- #2274: Support clojure 1.12 new type hint notations
- #2260: calling static field as function should warn, e.g.
(System/err)
- #1917: detect string being called as function
- #1923: Lint invalid fn name
- #2256: enable
assert
in hooks - #2253: add support for
datomic-type-extensions
to datalog syntax checking - #2255: support
:exclude-files
in combination with linting from stdin + provided --filename
argument - #2246: preserve metadata on symbol when going through
:macroexpand
hook - #2254: lint files in absence of config dir
- #2251: support suppressing
:unused-value
using :config-in-call
- #2266: suppress
:not-a-function
linter in reader tag - #2259:
ns-map
unmaps var defined prior in namespace - #2272: Report var usage in
if
/when
condition as always truthy, e.g. (when #'some-var 1)
- squint: CLJS syntax to JS compiler
- #472: Use consistent alias
- #474: fix JSX fragment
- #475: don't crash watcher on deleting file
- Add
simple-benchmark
- #468: Keywords in JSX should render with hyphens
- #466: Fix
doseq
expression with set!
in function return position - #462: Add
"exports"
field to package.json
- #460: escape
<
and >
in JSX strings - #458: don't emit
null
in statement position - #455: don't export non-public vars
- Fix infix operator in return position
- Allow playground to use JSX in non-REPL mode
- Add transducer arity to all existing core functions
- babashka: native, fast starting Clojure interpreter for scripting. Two releases in the past two months with the following changes:
- #1660: add
:deps-root
as part of hash to avoid caching issue with deps.clj
- #1632: fix
(.readPassword (System/console))
by upgrading GraalVM to 21.0.2
- #1661: follow symlink when reading adjacent bb.edn
- #1665:
read-string
should use non-indexing reader for compatibilty with Clojure - Bump edamame to 1.4.24
- Bump http-client to 0.4.16
- Bump babashka.cli to 0.8.57
- Uberjar task: support reader conditional in .cljc file
- Support reader conditional in .cljc file when creating uberjar
- Add more
javax.net.ssl
classes - #1675: add
hash-unordered-coll
- #1658: fix command line parsing for scripts that parse
--version
or version
etc - Add
clojure.reflect/reflect
- Add
java.util.ScheduledFuture
, java.time.temporal.WeekFields
- Support
Runnable
to be used without import - Allow
catch
to be used as var name - #1646: command-line-args are dropped when file exists with same name
- #1645: Support for
clojure.lang.LongRange
- #1652: allow
bb.edn
to be empty - #1586: warn when config file doesn't exist and
--debug
is enabled - #1410: better error message when exec fn doesn't exist
- Bump
babashka.cli
to 0.8.55
which contains subcommand improvements - Bump
deps.clj
to 1.11.1.1435
- Bump
babashka.fs
to 0.5.20
- Compatibility with
plumbing.core
- Compatibility with
shadow.css
by improving tools.reader
compatibility - #1647: Allow capturing env vars at build time (only relevant for building bb)
- process: Clojure library for shelling out / spawning sub-processes
- #123:
exec
now converts :env
and :extra-env
keywords (@lread) - #140: accept
java.nio.file.Path
as :dir
argument - #148: accept
Path
in :out
, :err
and :in
- Support
:out :bytes
(@hansbugge)
- babashka.json: babashka JSON library/adapter
- Released version 0.1.6 which fixes
:key-fn
+ read
behavior for cheshire
- tools-deps-native and tools.bbuild: use tools.deps directly from babashka
- Upgraded the underlying tools.build version to the latest version used in tools.build (the very latest wasn't compatible with tools.build!)
- edamame: Configurable EDN/Clojure parser with location metadata
- Support new
^[String]
metadata notation which desugars into ^{:param-tags [String]}
- Add
:map
and :set
options to coerce map/set literals into customizable data structures, for example, an ordered collections to preserve key order.
- nbb: Scripting in Clojure on Node.js using SCI
- Add
cljs.test/run-test
macro - Add cljs.core/Atom
- Add promesa
promesify
- http-client: babashka's http-client
- #45: query param values are double encoded
- CLI: Turn Clojure functions into CLIs!
- Fix #82: prefer alias over composite option
- Add
:opts
to :error-fn
input - Fix command line args for test runner
--dirs
, --only
, etc - Fix
--no-option
(--no
prefix) in combination with subcommands - Prioritize
:exec-args
over spec :default
s dispatch
improvements (@Sohalt, @borkdude):- The
:cmds
order of entries in the table doesn't matter - Support parsing intermediate options:
foo --opt1=never bar --opt2=always
- SCI: Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs
- Bump edamame
- Add
hash-ordered-coll
read-string
should use non-indexing reader
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
- http-server: serve static assets
- cherry: Experimental ClojureScript to ES6 module compiler
- fs - File system utility library for Clojure
- neil: A CLI to add common aliases and features to deps.edn-based projects
- 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.
- deps.clj: A faithful port of the clojure CLI bash script to Clojure
- babashka.nrepl: The nREPL server from babashka as a library, so it can be used from other SCI-based CLIs
- rewrite-edn: Utility lib on top of rewrite-clj with common operations to update EDN while preserving whitespace and comments
- 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
- scittle: Execute Clojure(Script) directly from browser script tags via SCI
- sql pods: babashka pods for SQL databases
- cljs-showcase: Showcase CLJS libs using SCI
- babashka.book: Babashka manual
- instaparse-bb
- 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-02-29
Tagged:
clojure
oss updates