announcements 2026-11-09

I got https://jolt-lang.net/ integrated in https://upbge.org which is a fork of the Blender game engine https://github.com/jlt-commons/upbge-jolt so now it can be driven entirely via nREPL, and all the game logic lives in Clojure. Best part is that UPBGE can build a standalone app as a release. The example in the project includes an interactive demo.

šŸ’Æ 6
3
šŸŽ‰ 11
⚔ 6

https://github.com/babashka/ffi: call C libraries from Clojure, babashka and Node.js. 0.1.3 (2026-11-09) • https://github.com/babashka/ffi/issues/65: write-string writes a NUL-terminated string into existing memory • https://github.com/babashka/ffi/issues/64: cfn accepts structs in a variadic signature, as return type and as argument • https://github.com/babashka/ffi/issues/63: callback accepts struct layouts as argument and return types • In a native image with libffi, callback accepts shapes outside the registered upcall set, such as more than 6 arguments or :float • In a native image with libffi, a callback costs about 30 ns instead of 2 us • The clj-kondo hook checks the arity of a defcfn with types after :& • read-array, write-array and copy accept a zero-size pointer for 0 elements • On the JVM, a callback receives a :uint, :uint32, :uint16 or :uint8 argument without sign extension

šŸŽ‰ 12

https://github.com/clj-commons/hickory: parse HTML into Clojure data structures. 0.7.8 (2026-11-09) • https://github.com/clj-commons/hickory/issues/98: as-hiccup converts the element after an empty script or style element (https://github.com/jacobemcken) • https://github.com/clj-commons/hickory/pull/94: parse accepts a String, File or Path without reflection and throws on other input (https://github.com/erdos) • Bump jsoup to 1.22.2

🌳 2
šŸŽ‰ 11

https://github.com/jacobemcken/html-to-md: Initial release 0.8.1 Converts HTML (via Hickory) to markdown. Handles nesting well (e.g. lists inside blockqoutes inside lists). Can be used from both Clojure and Babashka. Also, installable as a CLI tool: bbin install To see it in action: html-to-md html-to-md html-to-md html-to-md

šŸŽ‰ 9

Cool! This reminds me of https://github.com/dazld/r11y/. I’m not sure if you’ve seen it.

Nice, and no - I wasn’t aware of its existence. It didn’t show up in my search results for ā€œclojure html to markdownā€ šŸ˜… But it looks cool, especially because it works with Babashka - which is very important to me. I will deffo take a closer look. Thanks.

Happy to share. I’ve had a hard time finding Clojure projects myself unless they've been around for a long time.

I really like that r11y can include metadata as frontmatter (I was thinking of doing that myself), and also that it filters out content likely not relevant to the main content (inspired by Mozilla’s Readability and trafilatura) and a couple of other small niffy things šŸ‘ It does not handle nested content well though:

  • Apple
  • Banana
    1. The yellow one.
    2. A sunflower would be jealous.

      Even
      the sun.

  • Kiwi
r11y:
- Apple
- Banana       - The `yellow` one.
- > A *sunflower* would be jealous.
>
> **Even**
>  the sun.
>
>

- Kiwi
html-to-md :
-   Apple
-   Banana
    1.  The `yellow` one.
    2.  > A _sunflower_ would be jealous.
        >
        > **Even**
        > the sun.
-   Kiwi
I admit most if the time this doesn’t matter and LLMs likely don’t care, but I’m grasping for reasons to not have wasted over a week of late nights creating this šŸ˜…

šŸ‘ 1

@dazld, you might find this discussion interesting

šŸ™Œ 1

Thanks for the ping, Christoph! It is difficult to determine what is layout and what’s content sometimes, but Jacob’s nested list case is a no brainer. Thanks for the report, I’ll fix that up. If you’re interested… r11y started off using the classic arc90 readability algorithm, but it ended up working better (imo) the other way around. Arc90 goes bottom up with statistical scoring, and r11y goes top down with declarative reductions and text heuristics (tag names/roles, link density, text length..).. stuff like this. Both have tradeoffs.. arc90 was much of its time, html these days tends to carry much more semantic meaning than in 2009, aria roles etc. We use r11y at work where it generally produces cleaner signals than cloudflare’s markdown converter on the corpus I tried it on, so there’s that.. pairing it with cloudflare’s browser render to grab settled and js rendered html, which then gets passed to r11y server side works really well, if you want a recipe. The frontmatter is mostly from json-ld parsing, if you’re still reading šŸ˜›

Hehe, nice

Alex Miller (Clojure team) 2026-11-09T16:57:27.038689Z

Hey everyone, today we are opening the http://surveymonkey.com/r/clojure2026! If you use any Clojure dialect, we would love to learn about how you use Clojure and your tools. This survey has been running since 2010 and while it just takes a few minutes, it really is an important contribution in taking the pulse of the community. Thanks for participating.

20
šŸ‘€ 5
āœ”ļø 25

Was one of 35 or 36 meant to ask about mobile? They seem to ask the same Q, and I did not spot a mobile Q. I use Flutter via #C03A6GE8D32 for iOS.

Alex Miller (Clojure team) 2026-11-10T02:42:21.364099Z

don’t really have anything related to mobile, but that’s maybe something interesting to add

And there’s a mobile stack for React, IIRC. Mobile seems like a good outlet for Clojure. And the ClojureDart build tools make that approach painless. Pretty sure the ReactJS path is well-tooled, too.

kmet is a terminal coding agent written in Clojure, running on Babashka, Jolt and the JVM. 0.3.0 adds a persistent eval tool: one SCI environment per session, where a top-level definition with a docstring becomes a saved, reusable verb, while an undocumented definition stays session-only. Definitions are scoped to the session cwd or global, load in later sessions, and are managed with the /eval command. Enable it through /tools or the resource selection settings. Also in this release: run_code is now codemode, server mode over the RPC protocol, tool_search for deferred tools, rovider prompt caching improvements, deterministic VCC compaction (experimental), and per-agent permissions. Breaking changes: codemode and eval are opt-in, --app is gone, and extensions are plugin-only. https://github.com/kmetia/kmet-agent/releases/tag/v0.3.0 Come join us in #C0C33LDGNP2

⚔ 2