<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="340254" data-post-id="340254">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjrusso" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/120/29805_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjrusso
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi <img src="https://forum.elixirforum.com/images/emoji/apple/wave.png?v=15" title=":wave:" class="emoji" alt=":wave:" loading="lazy" width="20" height="20"> Thanks for pinging me. Some really great discussion here.</p>
<p>(For posterity: I just updated the nexREPL README to include a link to the simple demo I shared earlier today on Twitter, and to also link to this thread.)</p>
<p>Having been immersed in this for the past few days, a few thoughts:</p>
<ul>
<li>The biggest advantage of working in the existing nREPL ecosystem (IMO) is access to the editor-specific clients. However, after surveying the landscape of existing client implementations, and excluding the ones that aren’t Clojure-exclusive, there’s not a lot of options.</li>
<li>Eval’ing the expression at the given point/cursor position is pretty essential. The clients I tested don’t send all the necessary information over-the-wire to properly implement this on the server (there are optional parameters in the nREPL protocol for the “eval” operation for the file name, line number, column number, etc., which conceivably could let you put the logic on the server, but you still run into trouble with handling unsaved files etc).</li>
<li>All that being said, the relative simplicity of the nREPL protocol means that it isn’t a huge stretch to build a custom client. But at that point, why not build something fully custom that directly integrates with IEx and doesn’t have any Clojure baggage?</li>
<li>I am bullish on the idea of mediating this through LSP (as described at a high level in the nexREPL README), where LSP is the protocol that a custom “eval code” code action is sent through, the LSP server figures out the context and exactly what code you need to eval, and then sends the code directly to an existing IEx session. This of course is only one path of many options, but it solves the client issues and could reasonably be something built in to a language server (which would really help with adoption).</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340254" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-340254" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340254"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="340335" data-post-id="340335">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="marciol" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/marciol/120/4223_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  marciol
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/mauricio.szabo" rel="nofollow">@mauricio.szabo</a> is working on an extension for VS Code and Pulsar (Atom revamped) which allows the use of any nrepl language, it’s a matter of extending the plugin and it’s already working with Ruby. More info about how he did that:</p>
<p><iframe class="reddit-onebox" src="https://embed.reddit.com/r/Clojure/comments/1fjokt9/london_clojurians_talk_grinding_parenthesis_to/?embed=true&amp;ref_source=embed&amp;ref=share" width="640" height="500" allowfullscreen="" seamless="seamless" sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation"></iframe>
</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340335" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-340335" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340335"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="340518" data-post-id="340518">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjrusso" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/120/29805_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjrusso
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Great talk, and extremely impressive work by Mauricio!</p>
<p>(I’d imagine that Elixir-specific resolvers would be a lot easier to write than the Ruby versions, too, given the differences in language semantics/runtime.)</p>
<p>I wonder if it would be possible to delegate that work to Tree-sitter. If I’m understanding correctly, the various components of that extension are implemented in ClojureScript, and there are WASM bindings for Tree-sitter.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340518" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-340518" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340518"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="340519" data-post-id="340519">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjrusso" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/120/29805_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjrusso
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As a totally alternative approach, I recorded a demo video showing how a REPL-over-LSP implementation could (potentially) work:</p>
<p><a href="https://x.com/mjrusso/status/1837201282932633654" class="onebox" target="_blank" rel="noopener nofollow ugc">https://x.com/mjrusso/status/1837201282932633654</a></p>
<p>The benefit of this approach is the ability to leverage existing clients in your editor of choice. And the LSP server is already set up to understand your code and the context around the code you’re editing, so (I would imagine) it’s not a huge stretch for it to figure out exactly which code it needs to re-evaluate.</p>
<p>Worth noting: there were some concerns raised on Twitter about this LSP idea, particularly related to LSP server performance/overhead/etc. The nREPL protocol is certainly more efficient over-the-wire, but I don’t think it’s a big enough difference to matter in practice. Of course, running the LSP server itself can be extremely taxing, but the proposal is more about the client and the protocol: it should be possible to make an LSP server that essentially only does the code evaluation bits and is thus very lightweight.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340519" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-340519" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340519"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="340520" data-post-id="340520">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjrusso" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/120/29805_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjrusso
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>If this LSP approach is viable, and we implement a new “eval code” code action (as I’m proposing) in the new/official Elixir LSP, and the Elixir LSP is included in every Elixir release, then that means that every Elixir developer can have these capabilities with minimal setup.</p>
<p>(A lot of “ifs”, I know, but this does seem in reach.)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340520" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-340520" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340520"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="340548" data-post-id="340548">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mauricio.szabo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mauricio.szabo/120/35373_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mauricio.szabo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/mjrusso" rel="nofollow">@mjrusso</a> problem of integrating in LSP is that we don’t actually solve client issues. I don’t believe any LSP client that exists now expects an “evaluate” operation, and while that can be added, clients don’t actually have any logic for this kind of interaction to happen - meaning there are no UI design to handle evaluations, for example.</p>
<p>The great advantage to reuse some nREPL client is that if the client/plug-in doesn’t send all the information, the only actual change they need to add is to send that info - every other task related to “evaluate something and get back a result”, like some “awaiting result” state, or a command to “break” the evaluation, are probably already present. Piggiebacking on something that exists, even if it needs some adjustment, can be a huge advantage compared to start something fully custom that will need to start up implementations from scratch.</p>
<p>I know this is kind of a weird chicken-and-egg situation, where we need client support to justify a server implementation, and we need server support tonikplement the ckient side too <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340548" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-340548" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340548"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="340550" data-post-id="340550">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mauricio.szabo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mauricio.szabo/120/35373_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mauricio.szabo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mjrusso" data-post="14" data-topic="64872">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/48/29805_2.png" class="avatar"> mjrusso:</div>
<blockquote>
<p>I wonder if it would be possible to delegate that work to Tree-sitter</p>
</blockquote>
</aside>
<p>Great news then - I’m <em>cureently using TreeSitter</em> to parse Ruby in the Lazuli project <img src="https://forum.elixirforum.com/images/emoji/apple/smile.png?v=15" title=":smile:" class="emoji" alt=":smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340550" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-340550" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340550"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="340625" data-post-id="340625">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cevado" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cevado/120/40655_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cevado
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m stuck in a bunch of stuff that I already started, but I was planning to glue together your implementation of nrepl with the auto-complete/intelisense from LIvebook(that part of the code is pretty much isolated) to show how we could get a better autocomplete with nrepl.</p>
<p>I understand the idea of leveraging the already existing LSP infrastructure as a starting point, but as a long term thing it feels like diminishing all the power that comes from an nrepl approach(that is you being already inside in a live system).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340625" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-340625" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340625"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="340892" data-post-id="340892">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mjrusso" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mjrusso/120/29805_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mjrusso
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I pushed up a working (but lots of rough edges) REPL-over-LSP implementation (leveraging GenLSP by forking Next LS):</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://github.com/elixir-tools/next-ls/compare/main...mjrusso:exreplsp:prototype">
  <header class="source">
      <img src="https://github.githubassets.com/favicons/favicon.svg" class="site-icon" alt="" width="32" height="32">

      <a href="https://github.com/elixir-tools/next-ls/compare/main...mjrusso:exreplsp:prototype" target="_blank" rel="noopener nofollow ugc">GitHub</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/344;"><img src="https://opengraph.githubassets.com/90b9c33d532fa5d02e937346f2b61eaae9cee55b1d73d8fda306e1d5b8f9931c/elixir-tools/next-ls" class="thumbnail" alt="" width="690" height="345"></div>

<h3><a href="https://github.com/elixir-tools/next-ls/compare/main...mjrusso:exreplsp:prototype" target="_blank" rel="noopener nofollow ugc">Comparing elixir-tools:main...mjrusso:prototype · elixir-tools/next-ls</a></h3>

  <p>The language server for Elixir that just works. Contribute to elixir-tools/next-ls development by creating an account on GitHub.</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>Demo video here: <a href="https://twitter.com/mjrusso/status/1838602445187887110" class="inline-onebox" rel="noopener nofollow ugc">Michael Russo on X: "Elixir "REPL-over-LSP", now with a working prototype 🎉 (Kudos to @mitchhanberg for writing GenLSP and Next LS, which made this almost too easy :) Demo here: #myelixirstatus https://t.co/qL9usFPLz0" / X</a></p>
<p>It’s important to note that I didn’t modify Eglot (LSP client that ships with Emacs), besides telling it where to find my LSP server.</p>
<p><a class="mention" href="/u/mauricio.szabo" rel="nofollow">@mauricio.szabo</a> wrote:</p>
<blockquote>
<p><a class="mention" href="/u/mjrusso" rel="nofollow">@mjrusso</a> problem of integrating in LSP is that we don’t actually solve client issues. I don’t believe any LSP client that exists now expects an “evaluate” operation, and while that can be added, clients don’t actually have any logic for this kind of interaction to happen - meaning there are no UI design to handle evaluations, for example.</p>
<p>The great advantage to reuse some nREPL client is that if the client/plug-in doesn’t send all the information, the only actual change they need to add is to send that info - every other task related to “evaluate something and get back a result”, like some “awaiting result” state, or a command to “break” the evaluation, are probably already present. Piggiebacking on something that exists, even if it needs some adjustment, can be a huge advantage compared to start something fully custom that will need to start up implementations from scratch.</p>
<p>I know this is kind of a weird chicken-and-egg situation, where we need client support to justify a server implementation, and we need server support tonikplement the ckient side too <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
<p>To clarify my position: I think LSP support is a net positive because it makes it extremely easy for LSP users to experience the joys of REPL-driven development. That being said, I would personally use a better, more focused tool if one were available that worked with my editor-of-choice. In my ideal world we’d have both kinds of options <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>A few more notes about REPL-over-LSP:</p>
<ul>
<li>Elixir is pretty unique because (ironically) there’s no need to expose a REPL UI in the editor: you can already IEx into whatever node you want.</li>
<li>I don’t think that most of the UI issues you mention are blockers. LSP supports showing arbitrary messages, for example (although of course it didn’t work in my demo video linked above, but I have seen it work while I was implementing this… I must have broken something at some point, or hit some bug somewhere).</li>
</ul>
<p>All that being said, you can absolutely do a better job with a focused tool, and nREPL is certainly better.</p>
<p><a class="mention" href="/u/cevado" rel="nofollow">@cevado</a> wrote:</p>
<blockquote>
<p>I’m stuck in a bunch of stuff that I already started, but I was planning to glue together your implementation of nrepl with the auto-complete/intelisense from LIvebook(that part of the code is pretty much isolated) to show how we could get a better autocomplete with nrepl.</p>
</blockquote>
<p>Amazing, I’m really looking forward to seeing this!</p>
<blockquote>
<p>I understand the idea of leveraging the already existing LSP infrastructure as a starting point, but as a long term thing it feels like diminishing all the power that comes from an nrepl approach(that is you being already inside in a live system).</p>
</blockquote>
<p>Just a small point of clarification, the two approaches are the same in the sense that you also get an equivalent live system in the LSP case. (At the cost of more moving parts: the LSP server acts as a sort of proxy for eval’ing code on a networked node.) I explain how this works in this video: <a href="https://twitter.com/mjrusso/status/1837201282932633654" class="inline-onebox" rel="noopener nofollow ugc">Michael Russo on X: "Follow-up demo with more details about how an Elixir "REPL-over-LSP" setup might work: #myelixirstatus https://t.co/J4MjFXa0WA" / X</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340892" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-340892" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340892"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="340893" data-post-id="340893">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sodapopcan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/120/34668_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sodapopcan
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Do you have the video posted anywhere other than twitter per chance?</p>
<p>I suppose I already made this pretty clear but for me this type of thing excites me to use instead of LSP.  The only LSP feature I really care about is reliable jump-to-definition and LSP seems quite heavy for such a purpose.  I’d love to be able to contribute toward this end but it’s totally new ground for me.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="340893" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/extending-iex-to-have-nrepl-capabilities/64872/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-340893" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="340893"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/64872/load_more?page=3">Load more posts (7 remaining)</a>
</div></template></turbo-stream>