Clojure 1.13.0-alpha1 is released, adding checked keys for map destructuring that enforce required keys and throwing exceptions when missing, along with other improvements.
# Clojure - Clojure 1.13.0-alpha1
Source: [https://clojure.org/news/2026/07/02/clojure-1-13-alpha1](https://clojure.org/news/2026/07/02/clojure-1-13-alpha1)
*02 July 2026* *Alex Miller*
Clojure 1\.13\.0\-alpha1 is now available\! Find download and usage information on the[Downloads](https://clojure.org/releases/downloads)page\.
## [https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_checked_keys](https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_checked_keys)Checked keys
You can now ensure that required keys are bound during map destructuring by using the new checked variants of the :keys/:syms/:strs directives \- :keys\!/:syms\!/:strs\!, which will throw if the key is not present\. You can also, in all directives, specify keys after & which will not be bound, for documentation or checking purposes\.
- [CLJ\-2961](https://clojure.atlassian.net/browse/CLJ-2961)Checked keys
- [CLJ\-2960](https://clojure.atlassian.net/browse/CLJ-2960)Specs for checked keys
- [CLJ\-2949](https://clojure.atlassian.net/browse/CLJ-2949)req\! \- Variant of get that reports on key not found
- [CLJ\-2954](https://clojure.atlassian.net/browse/CLJ-2954)let/loop/let\* \- disallow & as local binding
## [https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_other_changes_since_clojure_1_12_5](https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_other_changes_since_clojure_1_12_5)Other changes since Clojure 1\.12\.5
- PersistentArrayMaps of only keyword keys now grow up to size 64 \(previously was 8\) before transitioning to PersistentHashMaps\. PAM identity scans are more efficient than PHM lookups in this range, also makes more usage sites monomorphic and thus easier to optimize\.
- [CLJ\-2891](https://clojure.atlassian.net/browse/CLJ-2891)Remove ACC\_FINAL designation from static initializer constants\. This change was made as a prepatory step towards moving the Java bytecode baseline to address new verifier checks\.
- Runtime and test dependencies updated to latest versions
## [https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_try_it_out](https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_try_it_out)Try it out
Update your deps\.edn :deps with:
```
org.clojure/clojure {:mvn/version "1.13.0-alpha1"}
```
Start a REPL with the Clojure CLI \(any version\) with:
```
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.13.0-alpha1"}}}
```
Elixir v1.20 introduces set-theoretic gradual typing, enabling type inference and verified bug detection without developer annotations, marking a major milestone in the language's evolution.
ClojureScript 1.12.145 introduces native async function support via the ^:async hint, enabling direct JavaScript async/await interop without additional dependencies.
An exploration of a surprising behavior in Elixir guards where the `is_map_key/2` guard can cause a guard failure instead of returning false, breaking the commutativity of boolean operators.
Ansatz is a Clojure library that implements Lean 4's Calculus of Inductive Constructions kernel, enabling Clojure programmers to write dependently typed, verified code with proofs compatible with Mathlib and compile to JVM bytecode.
jank, a Clojure dialect, has introduced a custom intermediate representation designed at the level of Clojure's semantics to enable better optimizations and compete with the JVM.