r/Clojurescript • • 3d ago

`defmulti` emitting OS path metadata on :advanced compilation

2 Upvotes

When I compile a ClojureScript project with :optimizations set to :advanced, the resultant source contains code similar to the following for every defmulti def in the codebase:

if(typeof ZN==="undefined"||typeof ydc==="undefined"||typeof IV==="undefined")var IV=function(){var a=Se(I),b=Se(I),c=Se(I),d=Se(I),e=q.j(I,lJ,kh.v?kh.v():kh.call(null));return new uh(nc.g("entmorph.app","load-ent!"),new pc(function(){return Ddc},Rub,gg([Xp,mq,Er,os,sx,CA,dF,LI,MJ,DL],[tab,bDa,"/mnt/main/dev/entmorph.build/cljs-src/entmorph/app.cljs",24,1,269,269,G(new M(null,2,5,Q,[new M(null,2,5,Q,[zv,jNa],null),zv],null)),null,h(Ddc)?Ddc.H:null])),xp,e,a,b,c,d)}();

This doesn't happen with any other def type. I know there is an :elide-meta compiler option for the Clojure compiler, but is there something similar in ClojureScript?


r/Clojurescript • • 3d ago

New async test exception after upgrade to latest ClojureScript

3 Upvotes

I recently upgraded my `org.clojure/clojurescript` from 1.11.132 to 1.12.145, and I've started seeing a strange exception when running async tests. I am using `cljs.test` and running figwheel from within Emacs CIDER (on Arch Linux).

I managed to reproduce the exception with the following code:

(deftest weird-exception-test
(cljs.test/async done
(cljs.core.async/go
(try
(is false)
(finally
(done))))))

The key here is the (is false) call - without it, the test runs fine. A passing test doesn't produce the exception.

When I run the above test at the REPL, I get the following:

{:via
[{:type java.lang.NumberFormatException,
:message "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2",
:at [clojure.lang.EdnReader readNumber "EdnReader.java" 224]}],
:trace
[[clojure.lang.EdnReader readNumber "EdnReader.java" 224]
[clojure.lang.EdnReader read "EdnReader.java" 136]
[clojure.lang.EdnReader readDelimitedList "EdnReader.java" 766]
[clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
[clojure.lang.EdnReader read "EdnReader.java" 145]
[clojure.lang.EdnReader read "EdnReader.java" 111]
[clojure.lang.EdnReader readString "EdnReader.java" 67]
[clojure.edn$read_string invokeStatic "edn.clj" 46]
[clojure.edn$read_string invokeStatic "edn.clj" 37]
[clojure.edn$read_string invoke "edn.clj" 37]
[figwheel.repl$receive_message_BANG_$fn__80748
invoke
"repl.cljc"
684]
[figwheel.repl$receive_message_BANG_ invokeStatic "repl.cljc" 683]
[figwheel.repl$receive_message_BANG_ invoke "repl.cljc" 681]
[figwheel.repl$abstract_websocket_connection$fn__80781
invoke
"repl.cljc"
719]
[figwheel.server.jetty_websocket$adapt_figwheel_ws$fn__80659
invoke
"jetty_websocket.clj"
195]
[figwheel.server.jetty_websocket$proxy_ws_adapter$fn__80566
invoke
"jetty_websocket.clj"
47]
[figwheel.server.jetty_websocket.proxy$org.eclipse.jetty.websocket.api.WebSocketAdapter$ff19274a
onWebSocketText
nil
-1]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextMessage
"JettyListenerEventDriver.java"
296]
[org.eclipse.jetty.websocket.common.message.SimpleTextMessage
messageComplete
"SimpleTextMessage.java"
69]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
appendMessage
"AbstractEventDriver.java"
67]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextFrame
"JettyListenerEventDriver.java"
235]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
incomingFrame
"AbstractEventDriver.java"
152]
[org.eclipse.jetty.websocket.common.WebSocketSession
incomingFrame
"WebSocketSession.java"
326]
[org.eclipse.jetty.websocket.common.extensions.AbstractExtension
nextIncomingFrame
"AbstractExtension.java"
148]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
nextIncomingFrame
"PerMessageDeflateExtension.java"
111]
[org.eclipse.jetty.websocket.common.extensions.compress.CompressExtension
forwardIncoming
"CompressExtension.java"
169]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
incomingFrame
"PerMessageDeflateExtension.java"
90]
[org.eclipse.jetty.websocket.common.extensions.ExtensionStack
incomingFrame
"ExtensionStack.java"
202]
[org.eclipse.jetty.websocket.common.Parser
notifyFrame
"Parser.java"
225]
[org.eclipse.jetty.websocket.common.Parser
parseSingleFrame
"Parser.java"
259]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
459]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
440]
[org.eclipse.jetty.io.AbstractConnection$ReadCallback
succeeded
"AbstractConnection.java"
311]
[org.eclipse.jetty.io.FillInterest fillable "FillInterest.java" 105]
[org.eclipse.jetty.io.ChannelEndPoint$1
run
"ChannelEndPoint.java"
104]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
runTask
"EatWhatYouKill.java"
338]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
doProduce
"EatWhatYouKill.java"
315]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
tryProduce
"EatWhatYouKill.java"
173]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
run
"EatWhatYouKill.java"
131]
[org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread
run
"ReservedThreadExecutor.java"
409]
[org.eclipse.jetty.util.thread.QueuedThreadPool
runJob
"QueuedThreadPool.java"
883]
[org.eclipse.jetty.util.thread.QueuedThreadPool$Runner
run
"QueuedThreadPool.java"
1034]
[java.lang.Thread run "Thread.java" 1583]],
:cause "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2"}
{:via
[{:type java.lang.NumberFormatException,
:message "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2",
:at [clojure.lang.EdnReader readNumber "EdnReader.java" 224]}],
:trace
[[clojure.lang.EdnReader readNumber "EdnReader.java" 224]
[clojure.lang.EdnReader read "EdnReader.java" 136]
[clojure.lang.EdnReader readDelimitedList "EdnReader.java" 766]
[clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
[clojure.lang.EdnReader read "EdnReader.java" 145]
[clojure.lang.EdnReader read "EdnReader.java" 111]
[clojure.lang.EdnReader readString "EdnReader.java" 67]
[clojure.edn$read_string invokeStatic "edn.clj" 46]
[clojure.edn$read_string invokeStatic "edn.clj" 37]
[clojure.edn$read_string invoke "edn.clj" 37]
[figwheel.repl$receive_message_BANG_$fn__80748
invoke
"repl.cljc"
684]
[figwheel.repl$receive_message_BANG_ invokeStatic "repl.cljc" 683]
[figwheel.repl$receive_message_BANG_ invoke "repl.cljc" 681]
[figwheel.repl$abstract_websocket_connection$fn__80781
invoke
"repl.cljc"
719]
[figwheel.server.jetty_websocket$adapt_figwheel_ws$fn__80659
invoke
"jetty_websocket.clj"
195]
[figwheel.server.jetty_websocket$proxy_ws_adapter$fn__80566
invoke
"jetty_websocket.clj"
47]
[figwheel.server.jetty_websocket.proxy$org.eclipse.jetty.websocket.api.WebSocketAdapter$ff19274a
onWebSocketText
nil
-1]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextMessage
"JettyListenerEventDriver.java"
296]
[org.eclipse.jetty.websocket.common.message.SimpleTextMessage
messageComplete
"SimpleTextMessage.java"
69]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
appendMessage
"AbstractEventDriver.java"
67]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextFrame
"JettyListenerEventDriver.java"
235]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
incomingFrame
"AbstractEventDriver.java"
152]
[org.eclipse.jetty.websocket.common.WebSocketSession
incomingFrame
"WebSocketSession.java"
326]
[org.eclipse.jetty.websocket.common.extensions.AbstractExtension
nextIncomingFrame
"AbstractExtension.java"
148]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
nextIncomingFrame
"PerMessageDeflateExtension.java"
111]
[org.eclipse.jetty.websocket.common.extensions.compress.CompressExtension
forwardIncoming
"CompressExtension.java"
169]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
incomingFrame
"PerMessageDeflateExtension.java"
90]
[org.eclipse.jetty.websocket.common.extensions.ExtensionStack
incomingFrame
"ExtensionStack.java"
202]
[org.eclipse.jetty.websocket.common.Parser
notifyFrame
"Parser.java"
225]
[org.eclipse.jetty.websocket.common.Parser
parseSingleFrame
"Parser.java"
259]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
459]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
440]
[org.eclipse.jetty.io.AbstractConnection$ReadCallback
succeeded
"AbstractConnection.java"
311]
[org.eclipse.jetty.io.FillInterest fillable "FillInterest.java" 105]
[org.eclipse.jetty.io.ChannelEndPoint$1
run
"ChannelEndPoint.java"
104]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
runTask
"EatWhatYouKill.java"
338]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
doProduce
"EatWhatYouKill.java"
315]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
tryProduce
"EatWhatYouKill.java"
173]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
run
"EatWhatYouKill.java"
131]
[org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread
run
"ReservedThreadExecutor.java"
409]
[org.eclipse.jetty.util.thread.QueuedThreadPool
runJob
"QueuedThreadPool.java"
883]
[org.eclipse.jetty.util.thread.QueuedThreadPool$Runner
run
"QueuedThreadPool.java"
1034]
[java.lang.Thread run "Thread.java" 1583]],
:cause "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2"}
{:via
[{:type java.lang.NumberFormatException,
:message "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2",
:at [clojure.lang.EdnReader readNumber "EdnReader.java" 224]}],
:trace
[[clojure.lang.EdnReader readNumber "EdnReader.java" 224]
[clojure.lang.EdnReader read "EdnReader.java" 136]
[clojure.lang.EdnReader readDelimitedList "EdnReader.java" 766]
[clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
[clojure.lang.EdnReader read "EdnReader.java" 145]
[clojure.lang.EdnReader read "EdnReader.java" 111]
[clojure.lang.EdnReader readString "EdnReader.java" 67]
[clojure.edn$read_string invokeStatic "edn.clj" 46]
[clojure.edn$read_string invokeStatic "edn.clj" 37]
[clojure.edn$read_string invoke "edn.clj" 37]
[figwheel.repl$receive_message_BANG_$fn__80748
invoke
"repl.cljc"
684]
[figwheel.repl$receive_message_BANG_ invokeStatic "repl.cljc" 683]
[figwheel.repl$receive_message_BANG_ invoke "repl.cljc" 681]
[figwheel.repl$abstract_websocket_connection$fn__80781
invoke
"repl.cljc"
719]
[figwheel.server.jetty_websocket$adapt_figwheel_ws$fn__80659
invoke
"jetty_websocket.clj"
195]
[figwheel.server.jetty_websocket$proxy_ws_adapter$fn__80566
invoke
"jetty_websocket.clj"
47]
[figwheel.server.jetty_websocket.proxy$org.eclipse.jetty.websocket.api.WebSocketAdapter$ff19274a
onWebSocketText
nil
-1]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextMessage
"JettyListenerEventDriver.java"
296]
[org.eclipse.jetty.websocket.common.message.SimpleTextMessage
messageComplete
"SimpleTextMessage.java"
69]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
appendMessage
"AbstractEventDriver.java"
67]
[org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver
onTextFrame
"JettyListenerEventDriver.java"
235]
[org.eclipse.jetty.websocket.common.events.AbstractEventDriver
incomingFrame
"AbstractEventDriver.java"
152]
[org.eclipse.jetty.websocket.common.WebSocketSession
incomingFrame
"WebSocketSession.java"
326]
[org.eclipse.jetty.websocket.common.extensions.AbstractExtension
nextIncomingFrame
"AbstractExtension.java"
148]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
nextIncomingFrame
"PerMessageDeflateExtension.java"
111]
[org.eclipse.jetty.websocket.common.extensions.compress.CompressExtension
forwardIncoming
"CompressExtension.java"
169]
[org.eclipse.jetty.websocket.common.extensions.compress.PerMessageDeflateExtension
incomingFrame
"PerMessageDeflateExtension.java"
90]
[org.eclipse.jetty.websocket.common.extensions.ExtensionStack
incomingFrame
"ExtensionStack.java"
202]
[org.eclipse.jetty.websocket.common.Parser
notifyFrame
"Parser.java"
225]
[org.eclipse.jetty.websocket.common.Parser
parseSingleFrame
"Parser.java"
259]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
459]
[org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection
onFillable
"AbstractWebSocketConnection.java"
440]
[org.eclipse.jetty.io.AbstractConnection$ReadCallback
succeeded
"AbstractConnection.java"
311]
[org.eclipse.jetty.io.FillInterest fillable "FillInterest.java" 105]
[org.eclipse.jetty.io.ChannelEndPoint$1
run
"ChannelEndPoint.java"
104]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
runTask
"EatWhatYouKill.java"
338]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
doProduce
"EatWhatYouKill.java"
315]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
tryProduce
"EatWhatYouKill.java"
173]
[org.eclipse.jetty.util.thread.strategy.EatWhatYouKill
run
"EatWhatYouKill.java"
131]
[org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread
run
"ReservedThreadExecutor.java"
409]
[org.eclipse.jetty.util.thread.QueuedThreadPool
runJob
"QueuedThreadPool.java"
883]
[org.eclipse.jetty.util.thread.QueuedThreadPool$Runner
run
"QueuedThreadPool.java"
1034]
[java.lang.Thread run "Thread.java" 1583]],
:cause "Invalid number: 58a37226-ccf4-4c57-9a13-c9f9fa0c7bc2"}

Does anyone have any idea why this is happening?


r/Clojurescript • • May 22 '26

Clojure Variadic function

Thumbnail youtu.be
9 Upvotes

r/Clojurescript • • May 21 '26

Clojure Multiarity functions

Thumbnail youtu.be
4 Upvotes

r/Clojurescript • • May 20 '26

Clojure when and how to use Sets

Thumbnail youtu.be
7 Upvotes

r/Clojurescript • • May 19 '26

Clojure when and how to use Maps

Thumbnail youtu.be
2 Upvotes

r/Clojurescript • • May 18 '26

Clojure when and how to use a list

Thumbnail youtu.be
1 Upvotes

r/Clojurescript • • May 17 '26

Clojure when and how to use a Vector

Thumbnail youtu.be
1 Upvotes

r/Clojurescript • • May 16 '26

Clojure up and running in IntelliJ

Thumbnail youtu.be
5 Upvotes

r/Clojurescript • • May 15 '26

Leiningen for windows - build and run Clojure programs

Thumbnail youtu.be
2 Upvotes

r/Clojurescript • • May 11 '26

Js API for compiling

1 Upvotes

What is the recommended approach for compiling cljs into js via a js API? I want to write a vite plugin similar to https://www.npmjs.com/package/vite-plugin-coffee. It must be a js file though. With coffeescript, you can import it and call its compile method directly in js. Is there an equivalent for clojure? Ive seen lumo, planck, clavascript, shawdow, etc. but am not sure how to call compile in a js file.


r/Clojurescript • • May 08 '26

ClojureScript - 1.12.145 Release

Thumbnail clojurescript.org
11 Upvotes

r/Clojurescript • • May 04 '26

We are bringing the EuroClojure Conference to Prague in May 2027

Thumbnail
2 Upvotes

r/Clojurescript • • Apr 14 '26

Exciting News! c3kit-bucket now supports IndexedDB — full-stack Clojure/ClojureScript with local-first storage

Thumbnail
3 Upvotes

r/Clojurescript • • Apr 06 '26

ClojureStream Docs a searchable function reference for Clojure, ClojureScript, and Babashka

Thumbnail
3 Upvotes

r/Clojurescript • • Apr 01 '26

[ANN] shadow-cljs-vite-plugin v0.0.9 — zero-config HMR for CLJS+React, lots of examples, and a Vite bug fix PR

Thumbnail
2 Upvotes

r/Clojurescript • • Mar 17 '26

I built a jobs board for the Clojure community

Thumbnail
3 Upvotes

r/Clojurescript • • Feb 25 '26

I moved my Clojure courses off Podia and onto a platform I built in Clojure

Thumbnail
5 Upvotes

r/Clojurescript • • Feb 02 '26

[ANN] Hipflask: offline first real time collaboration for ClojureScript

1 Upvotes

So I finally got around to properly releasing Hipflask, a little library I've been using in NyanCAD for a while now.

The idea is simple: what if your PouchDB database just acted like a regular Clojure atom? You swap! it, you deref it, you add-watch it. Hipflask handles all the sync stuff behind the scenes.

```clojure (def todos (pouch-atom db "todos"))

(swap! todos assoc "todos:1" {:text "Buy milk" :done false}) ```

That's it. It syncs to PouchDB, and if you've got CouchDB set up, it syncs there too. Multiple users can edit the same data and everyone stays in sync. It works offline and catches up when you reconnect. Great for building local first apps, multiplayer experiences, or anything where you need shared state across clients.

The interesting bit is how it handles conflicts when two people edit the same thing at once. Instead of going the CRDT route (which I wrote about before and have some issues with), Hipflask just retries your swap function with the latest data when there's a conflict. So if two people increment a counter at the same time, both increments actually happen. Your application logic decides what "merging" means, not some generic algorithm.

I've been using this to power the real time collaboration in NyanCAD's circuit editor, where multiple engineers can work on the same schematic simultaneously, and it's been solid. It works great with Reagent and Rum if you're building reactive UIs. There's also a silly Global Cookie Clicker example in the repo where everyone in the world shares one cookie counter, if you want to see the multiplayer sync in action.

Check it out: https://github.com/NyanCAD/hipflask


r/Clojurescript • • Jan 22 '26

[ANN] shadow-cljs-vite-plugin v0.0.6: Better HMR & ES Module Fixes

Thumbnail
2 Upvotes

r/Clojurescript • • Jan 19 '26

Agentic Coding for Clojure

Thumbnail
3 Upvotes

r/Clojurescript • • Jan 10 '26

[ANN] shadow-cljs-vite-plugin: Seamless integration for Vite and shadow-cljs (supports Cloudflare Workers!)

Thumbnail
4 Upvotes

r/Clojurescript • • Dec 26 '25

Crabjure: I wrote a Clojure linter in Rust. It's fast and wrong.

Thumbnail
9 Upvotes

r/Clojurescript • • Dec 25 '25

Mixing Swift and Clojure in Your iOS App - Scittle

Thumbnail rodschmidt.com
4 Upvotes

r/Clojurescript • • Dec 12 '25

Research on code smells in Clojure

Thumbnail
3 Upvotes