ClojureScript 1.12.145 introduces native async function support via the ^:async hint, enabling direct JavaScript async/await interop without additional dependencies.
# ClojureScript - 1.12.145 Release
Source: [https://clojurescript.org/news/2026-05-07-release](https://clojurescript.org/news/2026-05-07-release)
*07 May 2026* *ClojureScript Team*
We’re happy to announce a new release of ClojureScript\. If you’re an existing user of ClojureScript please read over the following release notes carefully\.
## [https://clojurescript.org/news/2026-05-07-release#_async_functions](https://clojurescript.org/news/2026-05-07-release#_async_functions)Async Functions
Now that ClojureScript targets[ECMAScript 2016](https://clojurescript.org/news/2025-11-24)we can carefully choose new areas of enhanced interop\. Starting with this release, hinting a function as`^:async`will make the ClojureScript compiler emit an[JavaScript async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function):
```
(refer-global :only '[Promise])
(defn ^:async foo [n]
(let [x (await (Promise/resolve 10))
y (let [y (await (Promise/resolve 20))]
(inc y))
;; not async
f (fn [] 20)]
(+ n x y (f))))
```
This also works for tests:
```
(deftest ^:async defn-test
(try
(let [v (await (foo 10))]
(is (= 61 v)))
(let [v (await (apply foo [10]))]
(is (= 61 v)))
(catch :default _ (is false))))
```
In the last Clojure survey support for async functions dominated the list of desired ClojureScript enhancements for JavaScript interop\. This enhancement eliminates the need to take on additional dependencies for the common cases of interacting with modern Browser APIs and popular libraries\.
For a complete list of fixes, changes, and enhancements to ClojureScript see[here](https://github.com/clojure/clojurescript/blob/master/changes.md#1.12.145)
## [https://clojurescript.org/news/2026-05-07-release#_contributors](https://clojurescript.org/news/2026-05-07-release#_contributors)Contributors
Thanks to all of the community members who contributed to ClojureScript 1\.12\.145
- Michiel Borkent
This article details how Clojure, with the JVM's Vector API and careful optimization, achieved frame rates within 20% of C for a 3D stress test, demonstrating that a dynamic language can approach low-level performance on hot loops.
Raymond Chen explains why C++/WinRT does not allow multiple awaits on asynchronous operations like C#, JavaScript, and Python do, citing the lack of a standard library task type and the principle of not paying for unused functionality.
This paper presents Hybrid ClojureScript, a programming language that allows developers to mix visual and textual syntax for domain-specific expressions, preserving composability and static reasoning.
A deep dive into the evolution of async programming models—from callbacks to promises—highlighting how each wave solved prior resource and performance issues while introducing new ergonomic challenges.
This paper introduces AsyncTool, a benchmark for evaluating LLM-based agents' asynchronous function calling abilities in multi-task scenarios with delayed tool responses. It proposes efficiency-oriented metrics and identifies key failure modes of current tool-using agents.