# shadow-cljs

**URL:** https://clojureverse.org/c/projects/shadow-cljs/20.md

[Latest](https://clojureverse.org/latest.md) · [Categories](https://clojureverse.org/categories.md) · [Tags](https://clojureverse.org/tags.md)

---

## [About the shadow-cljs category](https://clojureverse.org/t/about-the-shadow-cljs-category/578)

<div class="topic-metadata">

**Author:** [@plexus](https://clojureverse.org/u/plexus)\
**Replies:** 0\
**Last updated:** [October 2, 2017, 6:50pm UTC](https://clojureverse.org/t/about-the-shadow-cljs-category/578 "2017-10-02T18:50:03Z")

</div>

For questions, discussions, and announcements about shadow-cljs. shadow-cljs provides everything you need to compile your ClojureScript code with a focus on simplicity and ease of use. Assuming you are registered with t…

---

## [Shadow-cljs 3.4.x Updates](https://clojureverse.org/t/shadow-cljs-3-4-x-updates/14873)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 0\
**Last updated:** [April 11, 2026, 12:00pm UTC](https://clojureverse.org/t/shadow-cljs-3-4-x-updates/14873 "2026-04-11T12:00:13Z")

</div>

I just released the shadow-cljs 3.4.1version which includes a few changes I want to highlight. On the surface not much changes, but quite a few internal changes happened. npm-deps is now manual :npm-deps can be specifie…

---

## [Shadow-cljs 2.25.2 looking for testers](https://clojureverse.org/t/shadow-cljs-2-25-2-looking-for-testers/10206)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 11\
**Last updated:** [August 3, 2023, 4:07pm UTC](https://clojureverse.org/t/shadow-cljs-2-25-2-looking-for-testers/10206 "2023-08-03T16:07:39Z")

</div>

Update: Fixed a couple issues, try 2.25.2 I don’t usually do these release announcements, but I just released version 2.25.2 of shadow-cljs and it includes a fairly significant change, where I’d like to crowdsource some…

---

## [Use ESM with node & shadow-cljs](https://clojureverse.org/t/use-esm-with-node-shadow-cljs/9363)

<div class="topic-metadata">

**Author:** [@iGEL](https://clojureverse.org/u/iGEL)\
**Replies:** 3\
**Last updated:** [September 22, 2022, 10:18am UTC](https://clojureverse.org/t/use-esm-with-node-shadow-cljs/9363 "2022-09-22T10:18:46Z")

</div>

Hello there! I have to admit that I fail at requiring a ESM module in our node js app - The goal is to render parts of our apps on the server side. We have three builds: dev using :target :node-script - This is the o…

---

## [Promise handling in CLJS using js-await](https://clojureverse.org/t/promise-handling-in-cljs-using-js-await/8998)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 5\
**Last updated:** [June 1, 2022, 10:07am UTC](https://clojureverse.org/t/promise-handling-in-cljs-using-js-await/8998 "2022-06-01T10:07:23Z")

</div>

Recently I had to write some code using Promises and thought it was time for some syntax sugar. So I added a very simplistic macro to basically emulate what JS await does while actually mapping to traditional Promise .th…

---

## [How do you use Shadow-CLJS UI](https://clojureverse.org/t/how-do-you-use-shadow-cljs-ui/8614)

<div class="topic-metadata">

**Author:** [@jacekschae](https://clojureverse.org/u/jacekschae)\
**Replies:** 0\
**Last updated:** [February 6, 2022, 5:10pm UTC](https://clojureverse.org/t/how-do-you-use-shadow-cljs-ui/8614 "2022-02-06T17:10:39Z")

</div>

Here there, I wanted to find out how are you using Shadow-CLJS UI. Could you please share your screenshot in this issue? I would like to implement dark mode but thought it might be helpful to understand how people use it…

---

## [How do you automatically create multiple modules based on the files in a folder](https://clojureverse.org/t/how-do-you-automatically-create-multiple-modules-based-on-the-files-in-a-folder/8421)

<div class="topic-metadata">

**Author:** [@teez](https://clojureverse.org/u/teez)\
**Replies:** 1\
**Last updated:** [December 13, 2021, 6:04am UTC](https://clojureverse.org/t/how-do-you-automatically-create-multiple-modules-based-on-the-files-in-a-folder/8421 "2021-12-13T06:04:49Z")

</div>

Not sure if this use case is supported, or even if it’s a sane one. Basically, I want JS specific to each page. I will have .cljc file for each page. I basically want this file compiled into its own module. So for exampl…

---

## [Modify dev builds to fit inside enterprisey function as a service runtime](https://clojureverse.org/t/modify-dev-builds-to-fit-inside-enterprisey-function-as-a-service-runtime/8368)

<div class="topic-metadata">

**Author:** [@orolle](https://clojureverse.org/u/orolle)\
**Replies:** 3\
**Last updated:** [November 19, 2021, 6:08am UTC](https://clojureverse.org/t/modify-dev-builds-to-fit-inside-enterprisey-function-as-a-service-runtime/8368 "2021-11-19T06:08:12Z")

</div>

In good clojure tradition, I sneaked in some clojure code into my customers enterprise environment. I use shadow-cljs to generate a :node-library from my cljs code. This library is deployed to an enterprisey function as…

---

## [Webworker as a library's dependency](https://clojureverse.org/t/webworker-as-a-librarys-dependency/8277)

<div class="topic-metadata">

**Author:** [@nek](https://clojureverse.org/u/nek)\
**Replies:** 3\
**Last updated:** [October 17, 2021, 7:14pm UTC](https://clojureverse.org/t/webworker-as-a-librarys-dependency/8277 "2021-10-17T19:14:25Z")

</div>

Hello people, Is there any way to use a Web Worker defined in a library as a dependency? I guess not directly, but maybe there are some workarounds. The question comes from the fact, that at the moment I have to use th…

---

## [Generating ES Modules (Browser, Deno, ...)](https://clojureverse.org/t/generating-es-modules-browser-deno/6116)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 26\
**Last updated:** [September 7, 2021, 3:35pm UTC](https://clojureverse.org/t/generating-es-modules-browser-deno/6116 "2021-09-07T15:35:25Z")

</div>

ECMAScript Modules (also known as ES Modules or just ESM) were introduced quite a while ago but never were usable with CLJS in a convenient way. A new :target :esm in shadow-cljs attempts to change that by bundling the g…

---

## [Modern JS with CLJS: class and template literals](https://clojureverse.org/t/modern-js-with-cljs-class-and-template-literals/7450)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 10\
**Last updated:** [June 14, 2021, 9:23am UTC](https://clojureverse.org/t/modern-js-with-cljs-class-and-template-literals/7450 "2021-06-14T09:23:20Z")

</div>

I added the ability to create JS class and more recently support for JS template strings (optionally tagged) to shadow-cljs. I think they’d be useful additions to CLJS core at some point, but they’ll definitely need more…

---

## [New Build Reports with Dependency Traces](https://clojureverse.org/t/new-build-reports-with-dependency-traces/7653)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 1\
**Last updated:** [May 22, 2021, 8:06pm UTC](https://clojureverse.org/t/new-build-reports-with-dependency-traces/7653 "2021-05-22T20:06:13Z")

</div>

Last weekend I rewrote the build report feature a little bit. In the process I added a new feature that will show why certain files were included in a build in a simplistic shortest path graph trace. Basically most sour…

---

## [Using original JS source maps](https://clojureverse.org/t/using-original-js-source-maps/6469)

<div class="topic-metadata">

**Author:** [@mapidentity](https://clojureverse.org/u/mapidentity)\
**Replies:** 9\
**Last updated:** [September 2, 2020, 9:26pm UTC](https://clojureverse.org/t/using-original-js-source-maps/6469 "2020-09-02T21:26:53Z")

</div>

shadow-cljs allows using arbitrary JS files as documented in 12.2.3. JavaScript Dialects. For source maps, shadow-cljs appears to create new ones from the generated (and included) JS files. Is it possible to pass the sou…

---

## [Status Update - Inspect, cljs\_eval](https://clojureverse.org/t/status-update-inspect-cljs-eval/6074)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 18\
**Last updated:** [June 17, 2020, 1:27pm UTC](https://clojureverse.org/t/status-update-inspect-cljs-eval/6074 "2020-06-17T13:27:58Z")

</div>

Hey everyone, quite a few things have happened in shadow-cljs I and wanted to highlight some of the recent additions/changes. All features mentioned here are available in 2.10.5+. Inspect The main feature I worked on f…

---

## [Introducing shadow-cljs Inspect](https://clojureverse.org/t/introducing-shadow-cljs-inspect/5012)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 24\
**Last updated:** [May 7, 2020, 8:02pm UTC](https://clojureverse.org/t/introducing-shadow-cljs-inspect/5012 "2020-05-07T20:02:43Z")

</div>

With shadow-cljs 2.8.67 I released the first preview of the shadow-cljs “Inspect” feature. My first goal for this is to provide a console.log equivalent experience for all platforms. console.log in combination with some…

---

## [Building cannot resolve \`http2\` module for \`:browser\` target](https://clojureverse.org/t/building-cannot-resolve-http2-module-for-browser-target/5836)

<div class="topic-metadata">

**Author:** [@dbr.sh](https://clojureverse.org/u/dbr.sh)\
**Replies:** 3\
**Last updated:** [April 25, 2020, 4:19pm UTC](https://clojureverse.org/t/building-cannot-resolve-http2-module-for-browser-target/5836 "2020-04-25T16:19:40Z")

</div>

Hello! I’m brand new, but have been banging my head against the wall with this. I’m trying to build with the aws-amplify npm packge. I get this error when compiling with :target :browser: The required JS dependency "htt…

---

## [Create web app with shadow-cljs and Svelte](https://clojureverse.org/t/create-web-app-with-shadow-cljs-and-svelte/4720)

<div class="topic-metadata">

**Author:** [@dawran6](https://clojureverse.org/u/dawran6)\
**Replies:** 3\
**Last updated:** [August 12, 2019, 8:52pm UTC](https://clojureverse.org/t/create-web-app-with-shadow-cljs-and-svelte/4720 "2019-08-12T20:52:20Z")

</div>

Greetings everyone! I found Svelte very interesting and started to experiment it with ClojureScript. For those who don’t know, the elevator pitch of Svelte is: Svelte is a radical new approach to building user interfa…

---

## ["Upgrading" the react-native support](https://clojureverse.org/t/upgrading-the-react-native-support/4669)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 25\
**Last updated:** [August 17, 2019, 3:52pm UTC](https://clojureverse.org/t/upgrading-the-react-native-support/4669 "2019-08-17T15:52:06Z")

</div>

Hey everyone, over the next few weeks I’ll be working on a couple of updates for the react-native integration in shadow-cljs. While it already works quite well it has some issues that can be improved and I wanted to giv…

---

## [React Native + expo with shadow-cljs](https://clojureverse.org/t/react-native-expo-with-shadow-cljs/3806)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 3\
**Last updated:** [May 4, 2019, 10:54am UTC](https://clojureverse.org/t/react-native-expo-with-shadow-cljs/3806 "2019-05-04T10:54:06Z")

</div>

react-native has been on my todo-list for quite a while. I did a couple experiments with it in the past but never quite finished the “official” support since I don’t do any real react-native development myself. Several p…

---

## [Multiple targets browser on the same page](https://clojureverse.org/t/multiple-targets-browser-on-the-same-page/4057)

<div class="topic-metadata">

**Author:** [@jeans11](https://clojureverse.org/u/jeans11)\
**Replies:** 2\
**Last updated:** [March 25, 2019, 8:48pm UTC](https://clojureverse.org/t/multiple-targets-browser-on-the-same-page/4057 "2019-03-25T20:48:25Z")

</div>

Hi! I wonder if it’s possible to have two builds (browser) and integrate them to the same page? Thx

---

## [What shadow-cljs is and isn't](https://clojureverse.org/t/what-shadow-cljs-is-and-isnt/3902)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 4\
**Last updated:** [March 12, 2019, 8:24am UTC](https://clojureverse.org/t/what-shadow-cljs-is-and-isnt/3902 "2019-03-12T08:24:24Z")

</div>

Finally wrote the Blog Post I’ve been meaning to write for a while. Hopefully it clears some of the confusion about what shadow-cljs actually is for those familiar with the ecosystem. https://code.thheller.com/blog/shad…

---

## [Code Splitting ClojureScript](https://clojureverse.org/t/code-splitting-clojurescript/3927)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 0\
**Last updated:** [March 6, 2019, 9:05am UTC](https://clojureverse.org/t/code-splitting-clojurescript/3927 "2019-03-06T09:05:31Z")

</div>

Code Splitting has been around for a while but I feel it is somewhat underused in most ClojureScript projects and there aren’t many examples showing how you actually use it. Once your project reaches a certain size you …

---

## [Shadow.lazy - Convenience wrapper for shadow.loader/cljs.loader](https://clojureverse.org/t/shadow-lazy-convenience-wrapper-for-shadow-loader-cljs-loader/3841)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 3\
**Last updated:** [March 2, 2019, 7:46am UTC](https://clojureverse.org/t/shadow-lazy-convenience-wrapper-for-shadow-loader-cljs-loader/3841 "2019-03-02T07:46:49Z")

</div>

shadow.loader or the cljs.loader variant in CLJS only wrap the underlying goog.module.ModuleManager API in a very minimal fashion. Both are meant to load code-split :modules dynamically at runtime. The API is somewhat cl…

---

## [Using none-code resources in CLJS builds](https://clojureverse.org/t/using-none-code-resources-in-cljs-builds/3745)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 6\
**Last updated:** [March 1, 2019, 11:28pm UTC](https://clojureverse.org/t/using-none-code-resources-in-cljs-builds/3745 "2019-03-01T23:28:02Z")

</div>

There are various use cases where you’d want to use a static resource as part of the compilation of you source files. You may just want to include some longer text from a file or read a file, parse it and generate some c…

---

## [What's your most frequently used features in shadow-cljs?](https://clojureverse.org/t/whats-your-most-frequently-used-features-in-shadow-cljs/3791)

<div class="topic-metadata">

**Author:** [@jiyinyiyong](https://clojureverse.org/u/jiyinyiyong)\
**Replies:** 2\
**Last updated:** [February 18, 2019, 11:08am UTC](https://clojureverse.org/t/whats-your-most-frequently-used-features-in-shadow-cljs/3791 "2019-02-18T11:08:00Z")

</div>

I want to find some feedbacks on why people are coming to shadow-cljs and what are the most useful features. Those features should be highlighted on shadow-cljs.org .

---

## [Deploying CLJS Projects to netlify](https://clojureverse.org/t/deploying-cljs-projects-to-netlify/3724)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 3\
**Last updated:** [February 7, 2019, 4:33pm UTC](https://clojureverse.org/t/deploying-cljs-projects-to-netlify/3724 "2019-02-07T16:33:55Z")

</div>

I wanted to verify if shadow-cljs worked with netlify for frontend and their “functions” backend. Turns out it works fine and is pretty easy to setup. Anyone interested can take a look at the repo. It is currently dep…

---

## [Reducing the build size when using lots of JS dependencies](https://clojureverse.org/t/reducing-the-build-size-when-using-lots-of-js-dependencies/3742)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 1\
**Last updated:** [February 7, 2019, 10:26am UTC](https://clojureverse.org/t/reducing-the-build-size-when-using-lots-of-js-dependencies/3742 "2019-02-07T10:26:07Z")

</div>

I’m experimenting with a new option in shadow-cljs which can reduce the size of builds that require a lot of JS dependencies. By default I chose to use stable names, meaning that the actual name of the included file will…

---

## [Any chance we could reduce the bundle size in development?](https://clojureverse.org/t/any-chance-we-could-reduce-the-bundle-size-in-development/3690)

<div class="topic-metadata">

**Author:** [@jiyinyiyong](https://clojureverse.org/u/jiyinyiyong)\
**Replies:** 10\
**Last updated:** [February 4, 2019, 4:57pm UTC](https://clojureverse.org/t/any-chance-we-could-reduce-the-bundle-size-in-development/3690 "2019-02-04T16:57:06Z")

</div>

Even though my own code only contains tens of modules, shadow-cljs has too load a bunch of files from Closure Library and Clojure standard library. Most of code can be dead code eliminated during optimization: =\>\> du -a…

---

## [Creating websites with shadow-cljs + gatsby or next.js](https://clojureverse.org/t/creating-websites-with-shadow-cljs-gatsby-or-next-js/2912)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 6\
**Last updated:** [October 5, 2018, 2:21am UTC](https://clojureverse.org/t/creating-websites-with-shadow-cljs-gatsby-or-next-js/2912 "2018-10-05T02:21:30Z")

</div>

Gatsby.js is a static PWA (Progressive Web App) generator. gatsby is a pretty popular JS tool to build websites using React. The question whether its possible to use it with CLJS has come up a few times in the past an…

---

## [HUD or not?](https://clojureverse.org/t/hud-or-not/2862)

<div class="topic-metadata">

**Author:** [@thheller](https://clojureverse.org/u/thheller)\
**Replies:** 4\
**Last updated:** [September 17, 2018, 9:24am UTC](https://clojureverse.org/t/hud-or-not/2862 "2018-09-17T09:24:18Z")

</div>

In the video I posted a couple days ago I mentioned that the goal for the shadow-cljs UI is to be embeddable. One of the locations this could be embedded into would be the Chrome Devtools and this then begs the question…

[Next page](https://clojureverse.org/c/projects/shadow-cljs/20.md?page=1)
