https://github.com/pitch-io/uix — Idiomatic ClojureScript interface to modern React, v1.4.5 is out, com.pitch/uix.core {:mvn/version "1.4.5"}
• React 19.2.0 compatibility:
◦ Added uix.core/activity component, see https://react.dev/reference/react/Activity docs
◦ Updated uix.core/use-effect-event to use native useEffectEvent (https://react.dev/blog/2025/10/01/react-19-2#use-effect-event) hook (when available)
• Added use-atom hook, see https://github.com/pitch-io/uix/blob/master/docs/hooks.md#use-atom
👋 #uix
Well that depends on the scale of your project. I’d definitely go with event bus for long lasting project where multiple dev teams are involved.
with stuff like use-atom, it’s getting hard to decide to use the refx with this library or not. I guess the benefit would be the event system
https://github.com/babashka/babashka: Native, fast starting Clojure interpreter for scripting
1.12.209
• Bump to clojure 1.12.3
• https://github.com/babashka/babashka/issues/1870: add .addMethod to clojure.lang.MultiFn
• https://github.com/babashka/babashka/issues/1869: add clojure.lang.ITransientCollection for instance? checks
• https://github.com/babashka/babashka/issues/1865: support reify + equals + hashCode on Object
• Add java.nio.charset.CharsetDecoder, java.nio.charset.CodingErrorAction, java.nio.charset.CharacterCodingException in support of the https://github.com/outskirtslabs/sfv library
• Fix nrepl-server completions and lookup op to be compatible with rebel-readline
• Add clojure.lang.Ref for instance? checks
• Bump SCI: align unresolved symbol error message with Clojure
• Use GraalVM 25
• Bump deps.clj to 1.12.3.1557
• Change unknown or REPL file path to NO_SOURCE_PATH instead of since this can cause issues on Windows when checking for absolute file paths
• https://github.com/babashka/babashka/issues/1001: fix encoding issues on Windows in Powershell. Also see this https://github.com/oracle/graal/issues/12249 issue
• Fixes around java.security and allowing setting deprecated Cipher suites at runtime. See this https://github.com/babashka/babashka/commit/ace237832a5844330f5f9c342e1498eb0ca5f7ac.
• Support Windows Git Bash in bash install script
More news in 🧵
News • An https://www.emcken.dk/programming/2025/01/09/simple-clojure-lib-for-aws-presigned-urls-and-requests/ aboug the bb-compatible https://github.com/jacobemcken/aws-simple-sign library (recently discovered this one although it's from January) • https://github.com/tonsky/clj-simple-router is another routing library that you can use with httpkit, that works with babashka • https://zenn.dev/tkmfujise/articles/7eebdf57ae9fc3 • https://github.com/tonsky/clj-reload: now runs with bb • https://github.com/NoahTheDuke/lazytest/releases/tag/v1.9.1: the watch functionality now works with bb • https://github.com/socksy/bb-tower-deploy: Adapt a babashka project to run on http://tower.dev
Announcing https://chr15m.github.io/eucalypt/! 🍃 This is the story of how I replaced React & Reagent with 720 lines of slop-coded Squint-cljs and got a 10kb build size. 😹 I wanted to enter the js13k game jam. I wanted to use "ClojureScript". I wanted to use "Reagent". Is there some way I could build a <13kb artifact to satisfy the rules with these constraints? It seemed impossible. Solution: I forked https://bitbucket.org/sonwh98/mr-clean/src/master/ and slop-coded it into compiling with https://github.com/squint-cljs/squint. Outcome: https://github.com/chr15m/eucalypt is a Reagent-compatible-ish https://github.com/squint-cljs/squint library for building frontends with tiny (~10kb) artifacts. Demos: https://chr15m.github.io/eucalypt/. Tests: https://github.com/chr15m/eucalypt/blob/build/test-results.md (don't be fooled though, see below). Try it:
npm create eucalypt myapp
cd myapp
npm install
npm run watch
npm run build
Caveats & warnings. Experimental! If you squint hard enough it looks like Reagent, but it certainly isn't. It's very much a scrappy fiddle. "Slop-coded" means this library was built by 1. creating failing test cases 2. using various LLMs to fix the code until all tests pass. I spent literally TENS of dollars on magic computer-brain credits. 💸 I did this while concentrating on other things and I haven't spent a lot of time groking the code. If this development process makes you uncomfortable (as it makes me uncomfortable) then you should probably take care when running it. Do not be fooled by the ✨ 90/90 passing tests ✨ - it's almost certainly bug-ridden. 🐛 It's probably not for production systems, unless yeeting slop-code onto your live server is a thing at your company. It might be appropriate for small bits of frontend, demos, or gamejam entries where size is important and your particular Reagent form happens to not segfault and delete all your files.
Ok, have lawyer-proofed this enough? 😅 It's not my fault it was the magic computer brain your honour!
All that said, it's pretty fun being able to write Reagent-like code and https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/. It would be great to get some human eyeballs & brains on this and clean it up, find more failing Reagent forms, add more tests etc. PRs most welcome! Assume the code is terrible and your fix will be appreciated. Note that the goal is not a one-to-one replacement for the whole Reagent API, but the 80% most commonly used (at the moment it's just r/atom and r/render and form-1 and form-2 components). I would like it to remain under-engineered and simple. Thank you!
Bonus addenda: Borkdude's LLM-generated game demos:
• Game of life: https://squint-cljs.github.io/squint/?src=KG5zIGxpZmUuY29yZQogICg6cmVxdWlyZQogICAgWyJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2V1Y2FseXB0QDAuMC4zLytlc20iIDphcyByXSkpCgooZGVmIHNpemUgMzApICAgOzsgZ3JpZCBzaXplICgzMHgzMCkKKGRlZiBjZWxsIDE1KSA7OyBlYWNoIGNlbGwgPSAxNXB4CgooZGVmbiByYW5kCiAgIlJldHVybiBhIHJhbmRvbSBkb3VibGUgaW4gWzAuMCwgbikgaWYgbiBnaXZlbiwgZWxzZSBbMC4wLDEpLiIKICAoW10gKGpzL01hdGgucmFuZG9tKSkKICAoW25dICgqIG4gKGpzL01hdGgucmFuZG9tKSkpKQoKKGRlZm4gcmFuZG9tLWdyaWQgW10KICAodmVjIChmb3IgW3kgKHJhbmdlIHNpemUpXQogICAgICAgICAodmVjIChmb3IgW3ggKHJhbmdlIHNpemUpXQogICAgICAgICAgICAgICAgKGlmICg8IChyYW5kKSAwLjIpIDEgMCkpKSkpKQoKKGRlZm9uY2Ugc3RhdGUKICAoci9hdG9tIHs6Z3JpZCAocmFuZG9tLWdyaWQpCiAgICAgICAgICAgOnJ1bm5pbmc%2FIHRydWV9KSkKCihkZWZuIG5laWdoYm9ycyBbZ3JpZCB4IHldCiAgKGxldCBbY29vcmRzIFtbLTEgLTFdIFswIC0xXSBbMSAtMV0KICAgICAgICAgICAgICAgIFstMSAwXSAgICAgICAgIFsxIDBdCiAgICAgICAgICAgICAgICBbLTEgMV0gIFswIDFdICBbMSAxXV1dCiAgICAocmVkdWNlCiAgICAgIChmbiBbYWNjIFtkeCBkeV1dCiAgICAgICAgKGxldCBbbnggKCsgeCBkeCkgbnkgKCsgeSBkeSldCiAgICAgICAgICAoaWYgKGFuZCAoPj0gbnggMCkgKDwgbnggc2l6ZSkKICAgICAgICAgICAgICAgICAgICg%2BPSBueSAwKSAoPCBueSBzaXplKSkKICAgICAgICAgICAgKCsgYWNjIChudGggKG50aCBncmlkIG55KSBueCkpCiAgICAgICAgICAgIGFjYykpKQogICAgICAwCiAgICAgIGNvb3JkcykpKQoKKGRlZm4gc3RlcCBbZ3JpZF0KICAodmVjIChmb3IgW3kgKHJhbmdlIHNpemUpXQogICAgICAgICAodmVjIChmb3IgW3ggKHJhbmdlIHNpemUpXQogICAgICAgICAgICAgICAgKGxldCBbYWxpdmU%2FICg9IChudGggKG50aCBncmlkIHkpIHgpIDEpCiAgICAgICAgICAgICAgICAgICAgICBuIChuZWlnaGJvcnMgZ3JpZCB4IHkpXQogICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgIChhbmQgYWxpdmU%2FIChvciAoPSBuIDIpICg9IG4gMykpKSAxCiAgICAgICAgICAgICAgICAgICAgKGFuZCAobm90IGFsaXZlPykgKD0gbiAzKSkgMQogICAgICAgICAgICAgICAgICAgIDplbHNlIDApKSkpKSkpCgooZGVmbiB0aWNrIFtdCiAgKHN3YXAhIHN0YXRlCiAgICAgICAgIChmbiBbezprZXlzIFtncmlkIHJ1bm5pbmc%2FXSA6YXMgc3R9XQogICAgICAgICAgIChpZiBydW5uaW5nPwogICAgICAgICAgICAgKGFzc29jIHN0IDpncmlkIChzdGVwIGdyaWQpKQogICAgICAgICAgICAgc3QpKSkpCgooanMvc2V0SW50ZXJ2YWwgdGljayAyMDApCgooZGVmbiBjZWxsLXJlY3QgW3ggeSBhbGl2ZT9dCiAgWzpyZWN0IHs6eCAoKiB4IGNlbGwpIDp5ICgqIHkgY2VsbCkKICAgICAgICAgIDp3aWR0aCBjZWxsIDpoZWlnaHQgY2VsbAogICAgICAgICAgOmZpbGwgKGlmICg9IGFsaXZlPyAxKSAiYmxhY2siICJ3aGl0ZSIpCiAgICAgICAgICA6c3Ryb2tlICIjZGRkIn1dKQoKKGRlZm4gYm9hcmQgW10KICAobGV0IFt7OmtleXMgW2dyaWQgcnVubmluZz9dfSBAc3RhdGVdCiAgICBbOnN2ZyB7OndpZHRoICgqIHNpemUgY2VsbCkgOmhlaWdodCAoKiBzaXplIGNlbGwpCiAgICAgICAgICAgOnN0eWxlIHs6Ym9yZGVyICIxcHggc29saWQgYmxhY2sifX0KICAgICAoZm9yIFt5IChyYW5nZSBzaXplKQogICAgICAgICAgIHggKHJhbmdlIHNpemUpXQogICAgICAgXns6a2V5IChzdHIgeCAiLSIgeSl9CiAgICAgICBbY2VsbC1yZWN0IHggeSAobnRoIChudGggZ3JpZCB5KSB4KV0pCiAgICAgKHdoZW4gKG5vdCBydW5uaW5nPykKICAgICAgIFs6dGV4dCB7OnggNTAgOnkgNTAgOmZpbGwgInJlZCIgOmZvbnQtc2l6ZSAyMH0gIlBhdXNlZCJdKV0pKQoKKHIvcmVuZGVyCiAgW2JvYXJkXQogIChvcgogICAgKGpzL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkICJhcHAiKQogICAgKGRvdG8gKGpzL2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQgImRpdiIpCiAgICAgIChhc2V0ICJpZCIgImFwcCIpCiAgICAgIChqcy9kb2N1bWVudC5ib2R5LnByZXBlbmQpKSkp
• Snake: https://squint-cljs.github.io/squint/?src=KG5zIGRlbW8KICAoOnJlcXVpcmUKICAgWyJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2V1Y2FseXB0QDAuMC4zLytlc20iIDphcyByXQogICBbImh0dHBzOi8vZXNtLnNoL2VzLXRvb2xraXQiIDpyZWZlciBbaXNFcXVhbF1dKSkKCihkZWYgc2l6ZSAyMCkgICAgOzsgZ3JpZCBzaXplICgyMHgyMCkKKGRlZiBjZWxsIDEwKSAgICA7OyBlYWNoIGNlbGwgPSAxMHB4CgooZGVmb25jZSBzdGF0ZQogIChyL2F0b20gezpzbmFrZSBbWzUgMTBdIFs0IDEwXSBbMyAxMF1dIDsgaW5pdGlhbCBzbmFrZSBib2R5CiAgICAgICAgICAgOmRpciBbMSAwXSAgICAgICAgICAgICAgICAgICAgOyBtb3ZpbmcgcmlnaHQKICAgICAgICAgICA6Zm9vZCBbMTUgMTBdICAgICAgICAgICAgICAgICA7IGluaXRpYWwgZm9vZAogICAgICAgICAgIDphbGl2ZT8gdHJ1ZX0pKQoKKGRlZm4gcmFuZG9tLWZvb2QgW10KICBbKHJhbmQtaW50IHNpemUpIChyYW5kLWludCBzaXplKV0pCgooZGVmbiBtb3ZlLXNuYWtlIFtdCiAgKHN3YXAhIHN0YXRlCiAgICAgICAgIChmbiBbezprZXlzIFtzbmFrZSBkaXIgZm9vZCBhbGl2ZT9dIDphcyBzdH1dCiAgICAgICAgICAgKGlmIChub3QgYWxpdmU%2FKQogICAgICAgICAgICAgc3QKICAgICAgICAgICAgIChsZXQgW2hlYWQgKHZlYyBbKCsgKG50aCAoZmlyc3Qgc25ha2UpIDApIChudGggZGlyIDApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyAobnRoIChmaXJzdCBzbmFrZSkgMSkgKG50aCBkaXIgMSkpXSkKICAgICAgICAgICAgICAgICAgIGF0ZT8gKGlzRXF1YWwgaGVhZCBmb29kKQogICAgICAgICAgICAgICAgICAgbmV3LXNuYWtlICh2ZWMgKGNvbnMgaGVhZCAoaWYgYXRlPyBzbmFrZSAoYnV0bGFzdCBzbmFrZSkpKSkKICAgICAgICAgICAgICAgICAgIHggKG50aCBoZWFkIDApCiAgICAgICAgICAgICAgICAgICB5IChudGggaGVhZCAxKQogICAgICAgICAgICAgICAgICAgaGl0LXdhbGw%2FIChvciAoPCB4IDApICg8IHkgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD49IHggc2l6ZSkgKD49IHkgc2l6ZSkpCiAgICAgICAgICAgICAgICAgICBoaXQtc2VsZj8gKHNvbWUgIyhpc0VxdWFsIGhlYWQgJSkgKHJlc3QgbmV3LXNuYWtlKSldCiAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgaGl0LXdhbGw%2FIChhc3NvYyBzdCA6YWxpdmU%2FIGZhbHNlKQogICAgICAgICAgICAgICAgIGhpdC1zZWxmPyAoYXNzb2Mgc3QgOmFsaXZlPyBmYWxzZSkKICAgICAgICAgICAgICAgICBhdGU%2FICAgICAgKGFzc29jIHN0IDpzbmFrZSBuZXctc25ha2UgOmZvb2QgKHJhbmRvbS1mb29kKSkKICAgICAgICAgICAgICAgICA6ZWxzZSAgICAgKGFzc29jIHN0IDpzbmFrZSBuZXctc25ha2UpKSkpKSkpCgo7OyBUaW1lciBsb29wCihqcy9zZXRJbnRlcnZhbCBtb3ZlLXNuYWtlIDIwMCkKCjs7IEtleWJvYXJkIGNvbnRyb2xzCiguYWRkRXZlbnRMaXN0ZW5lciBqcy93aW5kb3cgImtleWRvd24iCiAgIChmbiBbZV0KICAgICAobGV0IFtrZXkgKC4ta2V5IGUpXQogICAgICAgKHN3YXAhIHN0YXRlIHVwZGF0ZSA6ZGlyCiAgICAgICAgICAgICAgKGZuIFtkaXJdCiAgICAgICAgICAgICAgICAoY2FzZSBrZXkKICAgICAgICAgICAgICAgICAgIkFycm93VXAiICAgIChpZiAoaXNFcXVhbCBkaXIgWzAgMV0pIGRpciBbMCAtMV0pCiAgICAgICAgICAgICAgICAgICJBcnJvd0Rvd24iICAoaWYgKGlzRXF1YWwgZGlyIFswIC0xXSkgZGlyIFswIDFdKQogICAgICAgICAgICAgICAgICAiQXJyb3dMZWZ0IiAgKGlmIChpc0VxdWFsIGRpciBbMSAwXSkgZGlyIFstMSAwXSkKICAgICAgICAgICAgICAgICAgIkFycm93UmlnaHQiIChpZiAoaXNFcXVhbCBkaXIgWy0xIDBdKSBkaXIgWzEgMF0pCiAgICAgICAgICAgICAgICAgIGRpcikpKSkpKQoKKGRlZm4gY2VsbC1yZWN0IFtbeCB5XSBjb2xvcl0KICBbOnJlY3Qgezp4ICgqIHggY2VsbCkgOnkgKCogeSBjZWxsKQogICAgICAgICAgOndpZHRoIGNlbGwgOmhlaWdodCBjZWxsCiAgICAgICAgICA6ZmlsbCBjb2xvcn1dKQoKKGRlZm4gZ2FtZS1ib2FyZCBbXQogIChsZXQgW3s6a2V5cyBbc25ha2UgZm9vZCBhbGl2ZT9dfSBAc3RhdGVdCiAgICBbOnN2ZyB7OndpZHRoICgqIHNpemUgY2VsbCkgOmhlaWdodCAoKiBzaXplIGNlbGwpCiAgICAgICAgICAgOnN0eWxlIHs6Ym9yZGVyICIxcHggc29saWQgYmxhY2siCiAgICAgICAgICAgICAgICAgICA6YmFja2dyb3VuZCAiI2VlZiJ9fQogICAgIDs7IHNuYWtlCiAgICAgKGZvciBbcGFydCBzbmFrZV0KICAgICAgIF57OmtleSAoc3RyIHBhcnQpfSBbY2VsbC1yZWN0IHBhcnQgImdyZWVuIl0pCiAgICAgOzsgZm9vZAogICAgIFtjZWxsLXJlY3QgZm9vZCAicmVkIl0KICAgICA7OyBnYW1lIG92ZXIgb3ZlcmxheQogICAgICh3aGVuIChub3QgYWxpdmU%2FKQogICAgICAgWzp0ZXh0IHs6eCA1MCA6eSAxMDAgOmZvbnQtc2l6ZSAyMCA6ZmlsbCAiYmxhY2sifSAiR2FtZSBPdmVyISJdKV0pKQoKKHIvcmVuZGVyCiAgW2dhbWUtYm9hcmRdCiAgKG9yCiAgICAoanMvZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgImFwcCIpCiAgICAoZG90byAoanMvZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAiZGl2IikKICAgICAgKGFzZXQgImlkIiAiYXBwIikKICAgICAgKGpzL2RvY3VtZW50LmJvZHkucHJlcGVuZCkpKSk%3D
• Tic Tac Toe: https://squint-cljs.github.io/squint/?src=KG5zIGRlbW8KICAoOnJlcXVpcmUKICAgWyJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2V1Y2FseXB0QDAuMC4zLytlc20iIDphcyByXSkpCgooZGVmbiBuZXctZ2FtZSBbXQogIHs6Ym9hcmQgKHZlYyAocmVwZWF0IDkgbmlsKSkKICAgOngtdHVybj8gdHJ1ZX0pCgooZGVmb25jZSBzdGF0ZSAoci9hdG9tIChuZXctZ2FtZSkpKQoKKGRlZm4gd2lubmVyIFtib2FyZF0KICAobGV0IFtsaW5lcyBbWzAgMSAyXSBbMyA0IDVdIFs2IDcgOF0KICAgICAgICAgICAgICAgWzAgMyA2XSBbMSA0IDddIFsyIDUgOF0KICAgICAgICAgICAgICAgWzAgNCA4XSBbMiA0IDZdXV0KICAgIChzb21lIChmbiBbW2EgYiBjXV0KICAgICAgICAgICAgKHdoZW4gKGFuZCAoZ2V0IGJvYXJkIGEpCiAgICAgICAgICAgICAgICAgICAgICAgKD0gKGdldCBib2FyZCBhKSAoZ2V0IGJvYXJkIGIpIChnZXQgYm9hcmQgYykpKQogICAgICAgICAgICAgIChnZXQgYm9hcmQgYSkpKQogICAgICAgICAgbGluZXMpKSkKCihkZWZuIHNxdWFyZSBbaV0KICAobGV0IFt7OmtleXMgW2JvYXJkIHgtdHVybj9dfSBAc3RhdGUKICAgICAgICBtYXJrIChnZXQgYm9hcmQgaSldCiAgICBbOmRpdiB7OnN0eWxlIHs6d2lkdGggIjYwcHgiIDpoZWlnaHQgIjYwcHgiCiAgICAgICAgICAgICAgICAgICA6Ym9yZGVyICIxcHggc29saWQgIzAwMCIKICAgICAgICAgICAgICAgICAgIDpkaXNwbGF5ICJmbGV4IiA6YWxpZ24taXRlbXMgImNlbnRlciIKICAgICAgICAgICAgICAgICAgIDpqdXN0aWZ5LWNvbnRlbnQgImNlbnRlciIKICAgICAgICAgICAgICAgICAgIDpmb250LXNpemUgIjI0cHgiCiAgICAgICAgICAgICAgICAgICA6Y3Vyc29yICJwb2ludGVyIn0KICAgICAgICAgICA6b24tY2xpY2sgIyh3aGVuIChhbmQgKG5pbD8gbWFyaykgKG5vdCAod2lubmVyIGJvYXJkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIChzd2FwISBzdGF0ZSB1cGRhdGUgOmJvYXJkIGFzc29jIGkgKGlmIHgtdHVybj8gIlgiICJPIikpCiAgICAgICAgICAgICAgICAgICAgICAgIChzd2FwISBzdGF0ZSB1cGRhdGUgOngtdHVybj8gbm90KSl9CiAgICAgbWFya10pKQoKKGRlZm4gYm9hcmQtdmlldyBbXQogIChsZXQgW3s6a2V5cyBbYm9hcmRdfSBAc3RhdGVdCiAgICBbOmRpdiB7OnN0eWxlIHs6ZGlzcGxheSAiZ3JpZCIKICAgICAgICAgICAgICAgICAgIDpncmlkLXRlbXBsYXRlLWNvbHVtbnMgInJlcGVhdCgzLCA2MHB4KSIKICAgICAgICAgICAgICAgICAgIDpncmlkLXRlbXBsYXRlLXJvd3MgInJlcGVhdCgzLCA2MHB4KSIKICAgICAgICAgICAgICAgICAgIDpnYXAgIjJweCJ9fQogICAgIChmb3IgW2kgKHJhbmdlIDkpXQogICAgICAgXns6a2V5IGl9IFtzcXVhcmUgaV0pXSkpCgooZGVmbiBnYW1lIFtdCiAgKGxldCBbezprZXlzIFtib2FyZCB4LXR1cm4%2FXX0gQHN0YXRlCiAgICAgICAgdyAod2lubmVyIGJvYXJkKV0KICAgIFs6ZGl2IHs6c3R5bGUgezpmb250LWZhbWlseSAic2Fucy1zZXJpZiJ9fQogICAgIFtib2FyZC12aWV3XQogICAgIChjb25kCiAgICAgICB3IFs6cCAoc3RyICJXaW5uZXI6ICIgdyldCiAgICAgICAoZXZlcnk%2FIHNvbWU%2FIGJvYXJkKSBbOnAgIkRyYXchIl0KICAgICAgIDplbHNlIFs6cCAoc3RyICJOZXh0IHR1cm46ICIgKGlmIHgtdHVybj8gIlgiICJPIikpXSkKICAgICBbOmJ1dHRvbiB7Om9uLWNsaWNrICMocmVzZXQhIHN0YXRlIChuZXctZ2FtZSkpfQogICAgICAiUmVzdGFydCJdXSkpCgooci9yZW5kZXIKICBbZ2FtZV0KICAob3IKICAgIChqcy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCAiYXBwIikKICAgIChkb3RvIChqcy9kb2N1bWVudC5jcmVhdGVFbGVtZW50ICJkaXYiKQogICAgICAoYXNldCAiaWQiICJhcHAiKQogICAgICAoanMvZG9jdW1lbnQuYm9keS5wcmVwZW5kKSkpKQ%3D%3D
Plot twist: I never did finish my gamejam game. 😅
🙇♂️I think it's worth noting that you used an LLM probably because you had a severe time contraint, but considering the little amount of code that Eucalypt is and that there is a reference implementation (Mr. Clean) we could get it in a curated state, improve performance, compatibility while keeping it small and simple
This is really cool!
A question about this gotcha:
> (get {} :a) evaluates to undefined not nil which can break assoc, update and friends on nil
Is this something that can be "fixed" in squint? I.e. taking an opinionated approach on handling undefined.
probably yes
I think it's already fixed
at least this was fixed recently. not yet released but could do now.
borkdude@MBP25-2 ~/dev/squint (main*) $ ./node_cli.js -e '(js/console.log (assoc js/undefined :a 1))'
{ a: 1 }
borkdude@MBP25-2 ~/dev/squint (main*) $ ./node_cli.js -e '(js/console.log (assoc-in js/undefined [:a] 1))'
{ a: 1 }let me just do that, then we can remove that from the README
BTW I added your SVG clock demo to the demos already.
nice! :)
I'm putting together a demo page with your other LLM generated games too, but it uncovered a Eucalypt bug so I couldn't publish it yet.
oh interesting
Needs a minimal repro
@chris358 I made an FPS demo here: https://squint-cljs.github.io/squint/?src=KG5zIGRlbW8KICAoOnJlcXVpcmUKICAgWyJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2V1Y2FseXB0QDAuMC4zLytlc20iIDphcyByXQogICBbImh0dHBzOi8vZXNtLnNoL2VzLXRvb2xraXQiIDpyZWZlciBbaXNFcXVhbF1dKSkKCgo7OyByZWFjdGl2ZSBhdG9tcwooZGVmIGNvdW50IChyL2F0b20gMCkpCihkZWYgZnBzIChyL2F0b20gMCkpCgooZGVmIG5vdyAoLm5vdyBqcy9EYXRlKSkKCjs7IHVwZGF0ZSBsb29wCihsZXRmbiBbKHRpY2sgW10KICAgICAgICAgIChsZXQgW2R0ICgtICgubm93IGpzL0RhdGUpICBub3cpXQogICAgICAgICAgICA7OyB1cGRhdGUgY291bnRlcgogICAgICAgICAgICAoc3dhcCEgY291bnQgaW5jKQogICAgICAgICAgICA7OyBjYWxjdWxhdGUgRlBTCiAgICAgICAgICAgIChyZXNldCEgZnBzICgvIEBjb3VudCAoLyBkdCAxMDAwKSkpCiAgICAgICAgICAgIDs7IHNhdmUgbGFzdCBmcmFtZSB0aW1lCiAgICAgICAgICAgIDs7IHNjaGVkdWxlIG5leHQgZnJhbWUKICAgICAgICAgICAgKGpzL3JlcXVlc3RBbmltYXRpb25GcmFtZSB0aWNrKSkpXQogICh0aWNrKSkKCihkZWZuIGZwcy1kZW1vIFtdCiAgWzpkaXYKICAgWzpoMiAiRlJQIEZyYW1lcyBwZXIgU2Vjb25kIERlbW8iXQogICBbOnAgIlJlYWN0aXZlIHVwZGF0ZXMgcGVyIHNlY29uZDogIiBAZnBzXV0pCgooci9yZW5kZXIKICBbZnBzLWRlbW9dCiAgKG9yCiAgICAoanMvZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgImFwcCIpCiAgICAoZG90byAoanMvZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAiZGl2IikKICAgICAgKGFzZXQgImlkIiAiYXBwIikKICAgICAgKGpzL2RvY3VtZW50LmJvZHkucHJlcGVuZCkpKSk%3D to see how many frames per second we reach with this stuff
I'm hitting 120 on my macbook pro, so that's good
that's the refresh sequence of my monitor
60 here. I thought you meant you'd already built a full first person shooter game.
sorry for the disappointment