A fast Babashka script for interacting with the running nREPL server. Located at server/nrepl.clj.
The script automatically reads the port from .nrepl-port file.
Command line argument (fastest for one-off commands):
./nrepl.clj '(+ 1 2 3)'
./nrepl.clj '(require '\''[podcast.db :as db]) (count (db/get-recent-episodes 10))'
./nrepl.clj '(require '\''[clojure.repl :as repl]) (repl/source podcast.server/validate-progress-snapshot)'Piped input:
echo '(+ 1 2 3)' | ./nrepl.clj
cat some-code.clj | ./nrepl.cljInteractive mode (if no args or piped input):
./nrepl.clj
# Starts interactive REPL prompt- Quick code evaluation: Test functions or run queries without restarting REPL
- Inspect running state: Check var values, function sources, database connections
- Database queries: Run quick DB queries to verify data
- Function testing: Test individual functions with different inputs
- Source inspection: Use
clojure.repl/sourceto view function implementations - Namespace reloading: Reload namespaces after code changes
# Check queue status
./nrepl.clj '(require '\''[podcast.db :as db]) (println "Queue count:" (count (db/get-user-queue "dev-user")))'
# View queue items with titles
./nrepl.clj '(require '\''[podcast.db :as db]) (let [queue (take 3 (db/get-user-queue "dev-user"))] (doseq [item queue] (println "Title:" (:user_play_queue/title item))))'
# Check subscriptions
./nrepl.clj '(require '\''[podcast.db :as db]) (let [subs (db/get-user-subscriptions "dev-user")] (println "Subscriptions:" (count subs)) (doseq [s (take 3 subs)] (println "-" (:subscriptions/title s))))'
# View highlights
./nrepl.clj '(require '\''[podcast.db :as db]) (let [highlights (db/get-user-highlights "dev-user")] (println "Total highlights:" (count highlights)) (when (pos? (count highlights)) (let [h (first highlights)] (println "Latest:" (:highlights/note h) "at" (:highlights/timestamp h) "seconds"))))'
# Get recent episodes
./nrepl.clj '(require '\''[podcast.db :as db]) (println "Recent episodes:" (count (db/get-recent-episodes 10)))'# View function source
./nrepl.clj '(require '\''[clojure.repl]) (clojure.repl/source podcast.server/validate-progress-snapshot)'
# Test a handler function
./nrepl.clj '(require '\''[podcast.server :as s]) (s/health-check-handler {})'
# Check server state
./nrepl.clj '(require '\''[podcast.server]) @podcast.server/server'- Much faster: Babashka starts instantly vs ~2-3 seconds for Clojure JVM
- Connected to running server: Access live server state and loaded namespaces
- No startup overhead: Reuses existing REPL connection