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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Asd" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Asd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="egeersoz" data-post="23" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/egeersoz/48/15704_2.png" class="avatar"> egeersoz:</div>
<blockquote>
<p>so I’ll give Dexter a try</p>
</blockquote>
</aside>
<p>There is a <a href="https://forum.elixirforum.com/t/should-lsps-be-implemented-in-their-own-language-split-thread/74969/20" rel="nofollow">vibecoded Elixir version</a> of the Dexter. Could you please test it out too to compare the feature parity and performance?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386777" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-386777" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386777"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="386778" data-post-id="386778">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="egeersoz" data-post="23" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/egeersoz/48/15704_2.png" class="avatar"> egeersoz:</div>
<blockquote>
<p>I get that, I just haven’t seen it before with other LSPs.</p>
</blockquote>
</aside>
<p>That depends from what angle are you asking your question. If you believe that quantity equals quality then you’d be flabbergasted. From my point of view, it’s very possible that Dexter’s creators are the only sane ones in a crazy world.</p>
<p>I am much more confused as to why is not <em>every</em> LSP using an embedded DB.</p>
<aside class="quote no-group" data-username="egeersoz" data-post="23" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/egeersoz/48/15704_2.png" class="avatar"> egeersoz:</div>
<blockquote>
<p>I guess I’d prefer these things with as few dependencies as possible but that might just be me.</p>
</blockquote>
</aside>
<p>That’s valid. I’d probably just go all the way: write it all in Rust <em>and</em> use one of Rust ecosystem’s embedded DBs. That way the only plumbing would be to distribute a precompiled NIF (trivial, especialy in the age of the LLMs).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386778" 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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-386778" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386778"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="386779" data-post-id="386779">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Asd" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Asd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="25" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>I am much more confused as to why is not <em>every</em> LSP using an embedded DB.</p>
</blockquote>
</aside>
<p>Cause you dont need an embedded DB to store and incrementally update the text index on disk. Even for a huge project like, for example, Android or Google Chrome, index would fit in 1GB of memory, so you just need a way to load the index from disk to memory, dump it back and to do this incrementally. That’s it. You don’t need a query language because there are no queries, data is already in memory and you can just filter it yourself.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386779" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-386779" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386779"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="386780" data-post-id="386780">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>1GB index dumped back into memory can easily be 8GB of RAM usage so I would very strongly challenge such approach in a PR for a team I am a part of. I would not want my LSP to take 8GB of RAM.</p>
<p>That being said, you could very easily be correct in general.</p>
<p>My experience tells me that many devs brush off proper architecture with the ubiquitous-but-overused YAGNI concept and then one day admit “sh1t, we actually did need a proper DB”. I’ve seen it dozens of times and that made me much more moderate when applying YAGNI.</p>
<p>To me bringing in a bundled SQLite (so you don’t require your users having it installed on their machine) and accessing it via a fully-contained Rust NIF does not deserve the term “overhead” (Like my library that has been promised for years already does – I am now finalizing the Ecto layer and will be announcing it sometime this year). It’s trivial to do. (Or don’t use SQLite at all; the Rust ecosystem has a bunch of less functional but still pretty good embedded DBs.) You pay a very small housekeeping price, once, and you get a peace of mind that you can go all the way to CTEs / window functions / recursive queries if you need them one day. And you can skip rolling your own household query engine – which such projects inevitably end up doing.</p>
<p>Engineering tradeoffs and all, I think we all here agree, but to me this discussion is akin to “why should I pay $0.30 to get a crate of gold delivered to me when I can pay $0.00 and get a crate of tin instead”. Hence my line of argumentation.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386780" 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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-386780" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386780"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="386781" data-post-id="386781">
  <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><a href="https://github.com/elixir-tools/next-ls" rel="noopener nofollow ugc">next-ls</a> made by one of the leads on Expert uses sqlite.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386781" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-386781" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386781"
                     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 #27"></div>
  </section>
</div>
    <div class="postbit" id="386782" data-post-id="386782">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="egeersoz" data-post="23" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/egeersoz/48/15704_2.png" class="avatar"> egeersoz:</div>
<blockquote>
<p>I just haven’t seen it before with other LSPs</p>
</blockquote>
</aside>
<p>Next LS also used SQLite</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386782" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-386782" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386782"
                     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 #28"></div>
  </section>
</div>
    <div class="postbit" id="386783" data-post-id="386783">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mudasobwa" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mudasobwa/120/5298_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mudasobwa
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Cure</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="25" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>I am much more confused as to why is not <em>every</em> LSP using an embedded DB.</p>
</blockquote>
</aside>
<p>FWIW, while building <code>Ragex</code> (it is not released yet, but it still can be considered kinda LSP-like beast) I’ve tried many options, including, but not limited to <code>term_to_binary |&gt; File.write</code>, SQL, NoSQL etc.</p>
<p>Graph DB stored in ETS worked for me. Mostly because the sourec tree is actually a graph, and it can barely be well-projected onto relational and/or flat store.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386783" 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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-386783" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386783"
                     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 #29"></div>
  </section>
</div>
    <div class="postbit" id="386784" data-post-id="386784">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="mudasobwa" data-post="30" data-topic="74963">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mudasobwa/48/5298_2.png" class="avatar"> mudasobwa:</div>
<blockquote>
<p>Graph DB stored in ETS worked for me. Mostly because the sourec tree is actually a graph, and it can barely be well-projected onto relational and/or flat store.</p>
</blockquote>
</aside>
<p>Nice. I can see how that works well.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386784" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-386784" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386784"
                     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 #30"></div>
  </section>
</div>
    <div class="postbit" id="386785" data-post-id="386785">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Asd" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Asd
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It’s not YAGNI. Solutions like SQLite introduce constraints for the features which you don’t need. For example, data must be tabular, it must live in a single file, you need a NIF adapter, you need to manage “connections”, data will must live on disk, parallel access will be limited by MVCC constraints, etc.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386785" data-batch-url="/posts/batch_likers">
                        0
                      </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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-386785" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386785"
                     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 #31"></div>
  </section>
</div>
    <div class="postbit" id="386786" data-post-id="386786">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah I don’t disagree. Let’s not over-fixate on SQLite. As <a class="mention" href="/u/mudasobwa" rel="nofollow">@mudasobwa</a> mentioned above, it could be a different kind of a DB (graph in his case). My broader point is: why not use something that can serve your storage and querying needs from the get go instead of inevitably reinventing a mini DB engine two years in the future, based on an idealistic hand-wavy “let’s have less dependencies” vibe?</p>
<p>Additionally, I don’t see the “NIF adapter” being any sort of a negative point here, especially with high-quality LLM agents in the equation. You can link your Elixir LSP code with a library written in almost any programming language in an hour.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386786" 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/dexter-a-fast-full-featured-elixir-lsp-optimized-for-large-codebases/74963/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-386786" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386786"
                     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 #32"></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/74963/load_more?page=4">Load more posts (26 remaining)</a>
</div></template></turbo-stream>