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.
Proposal for Async Context API in JavaScript to implicitly propagate values through asynchronous code, such as promise continuations or async callbacks.
The article examines how async/await syntax, while easy to write, creates significant complexity in production by conflating asynchrony with concurrency, often requiring manual partitioning of I/O and compute tasks across separate runtimes like Tokio and Rayon, leading to latency spikes and system instability.
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.