Skill: Shadow-CLJS Debug
Goal
To systematically identify and fix compilation errors, dependency issues, and configuration problems in shadow-cljs projects.
Use This Skill When
shadow-cljs compilefails.- The build hangs or loops indefinitely.
- You see "Undeclared Var", "No such namespace", or "Analysis Error".
- You suspect a dependency is missing.
Do Not Use This Skill When
- The error is clearly a syntax error (use
clojure-syntax-rescue).
Steps
- Analyze Error:
- Read the error message fully. Is it a compilation error or a dependency error? - Undeclared Var: You forgot to (:require [namespace:as alias]) or are using a function that doesn't exist. - No such namespace: The file path does not match the namespace declaration, or the package is not installed.
- Check Config:
- Read shadow-cljs.edn. Is the build ID correct? Are source paths included? - Read deps.edn (if used). Is the dependency listed? - Read package.json. Is the npm package installed?
- Clean State:
- If behavior is weird or inconsistent, delete the cache: rm -rf.shadow-cljs.cpcache. - Restart the watch process.
- Verify Interop:
- npm: Ensure you use (:require ["package-name":as pkg]) for npm packages. - Globals: Use js/window or js/console for globals, do not require them.
- Fix & Retry:
- Apply the fix. - Run npx shadow-cljs compile <build-id> (or release for production).
Output
- A successful compilation (exit code 0).
Strong Hints
- Constraint: Never edit the output files (for example
public/js/main.js). Only edit.cljssource. - Tip: Shadow-CLJS relies heavily on
package.jsonfor JS deps. If an npm import fails, checknode_modulesfirst (workspace-dependency-check). - Tip:
(:require [foo.bar:as bar])requires a file atsrc/foo/bar.cljs. Check file paths match namespaces exactly.
Suggested Next Skills
Check the Skill Graph for the full workflow.