shadow-cljs 2026-10-12

I just updated shadow-cljs from 3.4.11 to 3.5.5 and my app broke completely. According to Claude, the first version that would have caused this was 3.4.12. Specifically (quoting Claude here, sorry): - shadow-cljs replaces part of ClojureScript's code generation in shadow/build/cljs_hacks.cljc. In 3.4.12 it copied the CLJS-3024 fix, which changes how a deftype that implements IFn gets its .apply method. The copy dropped one step that upstream ClojureScript keeps: copying the arguments with aclone before .concat. - Rum calls every component through (.apply ctr ctr (js-arguments)), and ctr is a MetaFn, created by with-meta. So .apply receives the JavaScript arguments object. - .concat does not spread an arguments object. It appends it as one element. So every Rum component receives the arguments object as its only argument. - The result is a blank page. React reports error #31, because map entries and keywords end up rendered as children. The logo's <svg width> receives [object Arguments]. This seems to make sense to me, should I file a github issue?

hmm seems like that should be a problem with CLJS itself too then? like without shadow-cljs?

I think this looks like a real bug

Later fix: https://github.com/clojure/clojurescript/commit/7af8c42f6a9c045b4c5e213163a04816935ebe42 Which specifically mentions fn calls / rum components with over 20 args

oh I missed that one

❀️ 2

Am I the last person using Rum?

πŸ‘‹ 2

We are on 3.4.11 πŸ˜„

πŸ™‚ 1

should be fixed in 3.5.6

πŸŽ‰ 2

we are checking (this is for all fellow F1 Ferrari fans out there)

…aaaand shadow-cljs 3.5.6 fixes the problem! Thank you!

πŸ‘ 2

BTW, I feel like @thheller deserves some serious praise for shadow-cljs. More than a year ago, I switched my fairly large and complex app to building with shadow-cljs. This was not a small undertaking, and also along the way I split the app into modules, with dynamic module loading, which I could never get to work before. It would not have been possible without extensive help from Thomas (thanks! πŸ™). But more importantly, more than a year has passed, and now is the first time I have encountered a problem with shadow-cljs. Things just work reliably. There are no unexplained hangs, issues, or mysterious problems. This is very, very impressive. Especially for such a problematic and messy area as build systems. shadow-cljs is one of the best pieces of software I have ever seen. Thank you, Thomas, for creating it and maintaining it to such a high standard.

πŸ‘ 3
πŸ‘πŸΌ 1
πŸ’― 22
❀️ 8

thanks so much. glad it works for not just me πŸ˜‰

Seconded. The only reservation I have about sponsoring Thomas on GitHub is that I haven't done it sooner!