← Blog

One DAP client, three debuggers

June 11, 2026 · Adrian De Leon · debugging, dap

Editora can debug Java, Python, and JavaScript, and it does it with one client. The Debug Adapter Protocol (DAP) is the same idea as LSP but for debuggers: a common wire protocol so an editor doesn’t need bespoke code per language. The trick is that the three adapters are reached three completely different ways.

Three transports, one protocol

All three then speak the same protocol (via org.eclipse.lsp4j.debug), so breakpoints, stepping, watches, and the variables tree are written once. Above the client, everything is exposed as neutral records, so the UI and editor layers never import the debug library at all.

The gotchas were all about processes and threads

Getting three adapters working surfaced the same two traps as the language-server work, plus a threading one:

Why one client was worth it

It would have been faster, short-term, to write a Java-only debugger and stop there. But DAP meant Python and JavaScript were mostly a matter of “spawn the adapter differently and shape the launch arguments”: the breakpoints, stepping, call stack, watches, inline values, and the console came along for free. The same bet LSP makes for language smarts, DAP makes for debugging: do the protocol once, get the languages cheaply.