<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy" -->

---
title: Lowering the Drawbridge | daily.dev
description: Drawbridge 0.4 is released — a long-dormant HTTP transport for nREPL that lets you connect a Clojure REPL to applications running in environments where only...
canonical: https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Lowering the Drawbridge | daily.dev
og:description: Drawbridge 0.4 is released — a long-dormant HTTP transport for nREPL that lets you connect a Clojure REPL to applications running in environments where only...
og:url: https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy
og:image: https://api.daily.dev/og/posts/LTz7WXmjy.png
og:image:alt: Lowering the Drawbridge
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Lowering the Drawbridge

**[Meta Redux](https://daily.dev/sources/metaredux)** · 8 min read · 0 upvotes · 0 comments

## Summary

Drawbridge 0.4 is released — a long-dormant HTTP transport for nREPL that lets you connect a Clojure REPL to applications running in environments where only HTTP(S) is available (PaaS, container platforms, corporate firewalls). The release addresses three historical shortcomings: a new local bridge process now lets CIDER, Calva, and any standard nREPL client connect transparently over HTTP; built-in bearer-token authentication is now opt-out rather than opt-in; and a new WebSocket transport replaces the old long-polling mechanism with real server push. The 0.3.0 release earlier this year modernized the foundations (current nREPL, Ring, Clojure 1.10+, Java 17+, CI), while 0.4 delivers the user-facing improvements. The bridge CLI reads tokens from environment variables to avoid leaking them via process listings, writes a .nrepl-port file for automatic editor discovery, and provides clear error messages on connection failure.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://metaredux.com/posts/2026/07/14/lowering-the-drawbridge.html>

## Questions this post answers

### What's new in Drawbridge 0.4 for using nREPL over HTTP?

Drawbridge 0.4 adds a local bridge process (drawbridge.bridge) that exposes a normal nREPL socket on localhost and relays traffic to a remote Drawbridge HTTP endpoint, letting editors like CIDER and Calva connect directly. It also makes bearer-token authentication opt-out instead of opt-in via secure-ring-handler, refusing to create an unauthenticated endpoint unless :insecure true is explicitly passed, and adds a WebSocket transport replacing long-polling with real server push.

_Teams debugging production apps over HTTP-only ingress can track nREPL tooling changes like this via daily.dev._

### How do I connect my editor to a Clojure nREPL server that only exposes HTTP, not a raw socket?

Run the Drawbridge bridge CLI on your machine pointed at the remote HTTPS or WSS endpoint (for example, clojure -Sdeps with nrepl/drawbridge 0.4.0, then -M -m drawbridge.bridge --url https://my-app.example.com/repl), and it presents a plain nREPL socket on localhost that writes a .nrepl-port file, so cider-connect or lein repl :connect picks it up automatically without your editor knowing HTTP is involved.

_Developers wiring up remote REPL access over HTTP can follow setup details like this on daily.dev._

### Why did Drawbridge for nREPL never get widely adopted before its 0.4 release?

Drawbridge shipped for years with no built-in authentication, requiring users to bring their own middleware, so exposing a production REPL (effectively remote code execution as a service) over the public internet was risky. It also lacked support from mainstream nREPL clients like CIDER and Calva, working only through lein repl :connect, and its transport relied on sluggish long-polling instead of real server push, pushing most users toward SSH tunnels or nREPL's native TLS support instead.

_Anyone weighing SSH tunnels versus HTTP-based remote REPL tooling can follow this trade-off discussion on daily.dev._

## Similar posts on daily.dev

- [Clojurists Together Update: July and August 2026](https://daily.dev/posts/clojurists-together-update-july-and-august-2026-mwezuvilz) · Meta Redux · 0 upvotes · 0 comments
- [Port: a minimalist prepl client for Emacs](https://daily.dev/posts/port-a-minimalist-prepl-client-for-emacs-hduonpn7a) · Bozhidar Batsov · 0 upvotes · 0 comments
- [nREPL Forever](https://daily.dev/posts/nrepl-forever-rvhvow2fs) · Bozhidar Batsov · 0 upvotes · 0 comments
- [Clojurists Together Update: May and June 2026](https://daily.dev/posts/clojurists-together-update-may-and-june-2026-ngmznmylq) · Meta Redux · 0 upvotes · 0 comments
- [clj-refactor.el 4.0](https://daily.dev/posts/clj-refactor-el-4-0-9gwkhiivt) · Meta Redux · 0 upvotes · 0 comments

---

Tags: [#websocket](https://daily.dev/tags/websocket), [#clojure](https://daily.dev/tags/clojure)

[View this post on daily.dev](https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Lowering the Drawbridge","url":"https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy"},"datePublished":"2026-07-14T08:49:20.853Z","dateModified":"2026-09-14T08:01:31.296Z","description":"Drawbridge 0.4 is released — a long-dormant HTTP transport for nREPL that lets you connect a Clojure REPL to applications running in environments where only...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/dedf722536cd790a73f152e04476db6b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/dedf722536cd790a73f152e04476db6b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Meta Redux","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Meta Redux","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/553e6ad4c072454a986660a28a241343","url":"https://daily.dev/sources/metaredux"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"websocket,clojure","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Meta Redux","item":"https://daily.dev/sources/metaredux"},{"@type":"ListItem","position":3,"name":"Lowering the Drawbridge"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/lowering-the-drawbridge-ltz7wxmjy#faq","mainEntity":[{"@type":"Question","name":"What's new in Drawbridge 0.4 for using nREPL over HTTP?","acceptedAnswer":{"@type":"Answer","text":"Drawbridge 0.4 adds a local bridge process (drawbridge.bridge) that exposes a normal nREPL socket on localhost and relays traffic to a remote Drawbridge HTTP endpoint, letting editors like CIDER and Calva connect directly. It also makes bearer-token authentication opt-out instead of opt-in via secure-ring-handler, refusing to create an unauthenticated endpoint unless :insecure true is explicitly passed, and adds a WebSocket transport replacing long-polling with real server push. Teams debugging production apps over HTTP-only ingress can track nREPL tooling changes like this via daily.dev."}},{"@type":"Question","name":"How do I connect my editor to a Clojure nREPL server that only exposes HTTP, not a raw socket?","acceptedAnswer":{"@type":"Answer","text":"Run the Drawbridge bridge CLI on your machine pointed at the remote HTTPS or WSS endpoint (for example, clojure -Sdeps with nrepl/drawbridge 0.4.0, then -M -m drawbridge.bridge --url https://my-app.example.com/repl), and it presents a plain nREPL socket on localhost that writes a .nrepl-port file, so cider-connect or lein repl :connect picks it up automatically without your editor knowing HTTP is involved. Developers wiring up remote REPL access over HTTP can follow setup details like this on daily.dev."}},{"@type":"Question","name":"Why did Drawbridge for nREPL never get widely adopted before its 0.4 release?","acceptedAnswer":{"@type":"Answer","text":"Drawbridge shipped for years with no built-in authentication, requiring users to bring their own middleware, so exposing a production REPL (effectively remote code execution as a service) over the public internet was risky. It also lacked support from mainstream nREPL clients like CIDER and Calva, working only through lein repl :connect, and its transport relied on sluggish long-polling instead of real server push, pushing most users toward SSH tunnels or nREPL's native TLS support instead. Anyone weighing SSH tunnels versus HTTP-based remote REPL tooling can follow this trade-off discussion on daily.dev."}}]}
```

