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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://github.com/yoavgeva/ferricstore" rel="noopener nofollow ugc">https://github.com/yoavgeva/ferricstore</a><br>
Building distributed, crash-safe key-value 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="385812" 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/what-elixir-related-stuff-are-you-doing/113/894">Post #893</a>
	                </div>
	            </div>
              <div id="likers-container-385812" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="385812"
                     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 #893"></div>
  </section>
</div>
    <div class="postbit" id="386335" data-post-id="386335">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi all,</p>
<p>I’ve been working on something a bit unusual and wanted to get some perspective from people who actually build things on the BEAM.</p>
<p>Short version: I built a small language called Vor that compiles to gen_server/gen_statem. You declare states, message protocols, and safety invariants, and the compiler verifies the invariants against your actual handlers before producing BEAM bytecode. At runtime it’s just normal OTP.</p>
<p>The problem I’m interested in (I come from telecom/distributed systems) is state machine bugs that don’t crash — missing handlers, illegal transitions, two GenServers that disagree on the message format. Tests catch some of it, but the combinatorial explosion of states and message sequences makes it hard to be confident. I wanted the compiler to check those properties exhaustively instead of hoping my tests covered every path.</p>
<p>So far it can prove safety invariants at compile time (“never emit grant when lock is held”), monitor liveness with declared recovery (“lock must release within 5s or auto-recover”), and check that connected agents agree on their message protocols. There’s Gleam interop where the compiler validates extern types against package-interface.json. Some working examples include Raft consensus and a few CRDT types.</p>
<p>It’s meant to complement Elixir and Gleam - Vor handles the coordination layer, Elixir/Gleam handles data processing via extern calls.</p>
<p>Honestly curious if others have run into similar state machine correctness problems and what approaches you’ve found work.</p>
<p><a href="https://github.com/vorlang/vor" rel="noopener nofollow ugc">github.com/vorlang/vor</a><br>
<a href="https://vorlang.org/" rel="noopener nofollow ugc">vorlang.org</a></p>
<p>Cheers,<br>
James</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="386335" 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/what-elixir-related-stuff-are-you-doing/113/895">Post #894</a>
	                </div>
	            </div>
              <div id="likers-container-386335" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386335"
                     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 #894"></div>
  </section>
</div>
    <div class="postbit" id="386798" data-post-id="386798">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi again <img src="https://forum.elixirforum.com/images/emoji/apple/waving_hand.png?v=15" title=":waving_hand:" class="emoji" alt=":waving_hand:" loading="lazy" width="20" height="20"></p>
<p>I co-founded a tiny software company called <a href="https://mosspiglet.dev" rel="noopener nofollow ugc">Moss Piglet</a>, just me on the dev side, and it’s focused on making privacy-first web apps in Elixir and Phoenix Live View.</p>
<p>I’ve shared on here a bit about our social network with private journal and Bluesky interop, <a href="https://mosslet.com" rel="noopener nofollow ugc">Mosslet</a> — and now we just released our latest product/service called <a href="https://metamorphic.app" rel="noopener nofollow ugc">Metamorphic</a> — which is a zero-knowledge, privacy-first habit tracker.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://metamorphic.app">
  <header class="source">
      <img src="https://metamorphic.app/icons/favicon-96x96-d2edf7ff1fbbf93d24b2107138e23752.png?vsn=d" class="site-icon" alt="" width="96" height="96">

      <a href="https://metamorphic.app" target="_blank" rel="noopener nofollow ugc">Metamorphic</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/517;"><img src="https://metamorphic.app/images/open-graph-933361a2fe1726defc95643707a244d1.png?vsn=d" class="thumbnail" alt="" width="690" height="462"></div>

<h3><a href="https://metamorphic.app" target="_blank" rel="noopener nofollow ugc">Metamorphic</a></h3>

  <p>The zero-knowledge encrypted habit tracker. Transform your habits, own your growth — with end-to-end encryption by default.</p>


  </article>

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

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

<p>The zero-knowledge bit was inspired by our asynchronous encryption architecture from Mosslet that used the <code>:enacl</code> library, we spun that similar password-derived public-key cryptography logic into the browser with JS to enable zero-knowledge direct messaging in Mosslet (after Meta announced removing their E2EE), and then I was inspired to utilize that same zero-knowledge browser logic into an entire app flow.</p>
<p>I feel habit-tracking and goal-setting is deeply personal, and a simple, privacy-first approach makes sense to protect people’s personal data and mindset. Both of the projects are SaaS with Mosslet having a one-time payment option for life and Metamorphic having a free tier (if you don’t want to do a subscription).</p>
<p>And for being here and part of the community, you can use <strong>ELIXIRFORUM20</strong> to get 20% off either service forever. Hope they’re helpful to someone. <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" loading="lazy" width="20" height="20"></p>
<p>Other things I worked on:</p>
<ul>
<li>Ecto Guide on self-referencing many-to-many (inspired by early versions of Mosslet): <a href="https://hexdocs.pm/ecto/self-referencing-many-to-many.html" class="inline-onebox" rel="noopener nofollow ugc">Self-referencing many to many — Ecto v3.14.0</a></li>
<li>Simple library for checking pwned emails/passwords (under an old company name): <a href="https://github.com/coretheory/pwned_coretheory" class="inline-onebox" rel="noopener nofollow ugc">GitHub - moss-piglet/pwned_coretheory: A simple Elixir library to check passwords and emails with the HaveIBeenPwned? database. · GitHub</a></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="386798" 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/what-elixir-related-stuff-are-you-doing/113/896">Post #895</a>
	                </div>
	            </div>
              <div id="likers-container-386798" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="386798"
                     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 #895"></div>
  </section>
</div>
    <div class="postbit" id="387197" data-post-id="387197">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="kip" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/kip/120/1440_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  kip
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>ex_cldr Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Been a fun few weeks and got the last of my Localize updates out this morning. A lot of work over the last year has come together in a bit of a torrent but it’s been amazing fun. And despite all the quirks, I’m finding working with LLMs is increasing my joy factor. And productivity too.  I might have even got myself up to around 0.6 José (where a José is a unit of productivity). Yeah, just made that up - not enough coffee yet.</p>
<p>After 8 years I still find Elixir such a joy to work in, the community a great place to be part of and writing software very fulfilling - especially when people actually use it!</p>
<p>What I’ve published recently:</p>
<h3><a name="p-387197-new-and-updated-libraries-1" class="anchor" href="#p-387197-new-and-updated-libraries-1" aria-label="Heading link" rel="nofollow"></a>New and updated libraries</h3>
<ul>
<li>Updated Astro to do moonrise/set so I could implement Islamic and Hebrew calendars</li>
<li>Finally finished up <a href="https://hex.pm/packages/color" rel="nofollow">Color</a> which I badly wanted to do forever. And needed to do to have any chance of getting <a href="https://hex.pm/packages/image" rel="nofollow">Image</a> to 1.0 release (nearly there).</li>
<li>Launched a bunch of Localize libraries this week and probably got a lot of “groan, not another post” vibes from the community
<ul>
<li><a href="https://hex.pm/packages/localize" rel="nofollow">Localize</a></li>
<li><a href="https://hex.pm/packages/localize_web" rel="nofollow">Localize_web</a></li>
<li><a href="https://hex.pm/packages/localize_person_names" rel="nofollow">Localize person names</a></li>
<li><a href="https://hex.pm/packages/localize_phone_number" rel="nofollow">Localize phone number</a></li>
<li><a href="https://hex,pm/packages/localize_address" rel="nofollow">Localize_address</a></li>
<li><a href="https://hex.pm/packages/intl" rel="nofollow">Intl</a></li>
</ul>
</li>
<li><a href="https://hex.pm/packages/calendrical" rel="nofollow">Calendrical</a> which is a set of 17 calendars and custom calendar toolkit.</li>
<li><a href="https://hex.pm/packages/unity" rel="nofollow">Unity</a> which is a Unix <code>units</code> clone</li>
</ul>
<h3><a name="p-387197-new-web-sites-2" class="anchor" href="#p-387197-new-web-sites-2" aria-label="Heading link" rel="nofollow"></a>New web sites</h3>
<p>For the first time in years I’ve written actual apps and am running them for public consumption:</p>
<ul>
<li><a href="https://elixir-color.fly.dev" rel="nofollow">Elixir Color</a> which is a color palette generator and gamut visualizer</li>
<li><a href="https://playground.elixir-localize.com" rel="nofollow">Localize Playground</a> which is a place to experiment with some of the capabilities of Localize and CLDR.</li>
</ul>
<h3><a name="p-387197-whats-next-3" class="anchor" href="#p-387197-whats-next-3" aria-label="Heading link" rel="nofollow"></a>What’s next</h3>
<ul>
<li>Updates to <a href="https://hex.pm/packages/ex_money" rel="nofollow">ex_money</a> and <a href="https://hex.pm/packages/digital_token" rel="nofollow">digital_token</a> will be out early next week</li>
<li>Get syntax highlighting launched for MF2 messages in various text editors. The <a href="https://github.com/elixir-localize/mf2_editor_extensions" rel="nofollow">coding is done</a> (tree-sitter parser, editor extensions) but it’s a new testing environment for me to navigate and lots to learn. <strong>Collaborators very welcome</strong>.</li>
<li>Open a PR to Gettext to make message storage and retrieval pluggable. I want to build a translation workbench where product managers, developers and translators can collaborate on localising/translating messages and have that tightly integrated into code.</li>
<li>Fix a few issues in <code>ex_cldr</code> and friends (thanks for your patience)</li>
<li>Spend more time writing at <a href="https://elixir-localize.com" rel="nofollow">Elixir Localize</a></li>
<li>Sleep.</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="387197" data-batch-url="/posts/batch_likers">
                        12
                      </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/what-elixir-related-stuff-are-you-doing/113/897">Post #896</a>
	                </div>
	            </div>
              <div id="likers-container-387197" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387197"
                     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 #896"></div>
  </section>
</div>
    <div class="postbit" id="387199" data-post-id="387199">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Working on <a href="https://github.com/amackera/norns" rel="noopener nofollow ugc">Norns</a>, a durable execution runtime for AI agents built on OTP.</p>
<p>The basic problem is that agents are fragile. They crash, network calls fail, model providers go down, and most of the time that means you lose the run and start over. Norns keeps enough state around to resume after failure instead of throwing the whole thing away.</p>
<p>Right now it’s basically one GenServer per agent, supervised with DynamicSupervisor, with the run persisted as an event log in Postgres. Python and Elixir SDKs talk to it over WebSocket.</p>
<p>Still pretty early, but the core loop is there. You can kill -9 the runtime mid-run and it’ll pick back up on restart.</p>
<p><a href="https://github.com/amackera/norns" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/amackera/norns</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="387199" 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/what-elixir-related-stuff-are-you-doing/113/898">Post #897</a>
	                </div>
	            </div>
              <div id="likers-container-387199" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387199"
                     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 #897"></div>
  </section>
</div>
    <div class="postbit" id="387201" data-post-id="387201">
  <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/41119_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">
								<p>▸ <a href="https://hexdocs.pm/metastatic" rel="noopener nofollow ugc"><code>metastatic</code></a> is a MetaAST library aiming to build a MetaAST on top of per-language ASTs, <a href="https://forum.elixirforum.com/t/a-score-for-an-invisible-orchestra/74985" rel="nofollow">blog</a><br>
▸ <code>Cure</code> language is now Elixir-based, utilizing MetaAST as it’s native AST, <a href="https://cure-lang.org" rel="noopener nofollow ugc"><code>site</code></a>, <a href="https://forum.elixirforum.com/t/the-long-road-to-cure/75033" rel="nofollow">blog</a>, <a href="https://hexdocs.pm/makeup_cure" rel="noopener nofollow ugc"><code>makeup_cure</code></a><br>
▸ <a href="https://hexdocs.pm/marcli" rel="noopener nofollow ugc"><code>marcli</code></a> is a Markdown formatter for CLI, <a href="https://forum.elixirforum.com/t/marcli-render-markdown-in-terminal/74881" rel="nofollow">blog</a><br>
▸ <a href="https://hexdocs.pm/yeesh" rel="noopener nofollow ugc"><code>yeesh</code></a> is a LiveView wrapper for <code>xterm.js</code>, <a href="https://forum.elixirforum.com/t/yeesh-a-livecomponent-wrapper-for-xterm-js/74863" rel="nofollow">blog</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="387201" 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/what-elixir-related-stuff-are-you-doing/113/899">Post #898</a>
	                </div>
	            </div>
              <div id="likers-container-387201" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387201"
                     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 #898"></div>
  </section>
</div>
    <div class="postbit" id="387205" data-post-id="387205">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have been using what I call my <code>admin</code> in various forms and programming languages since 2008, it helps me manage my day-to-day business, invoicing, customers, nowadays Peppol, you know what I mean.</p>
<p>Recently I took a stab at a new version, using Ash and made it multi-tenant, multi-lingual, thank you <a class="mention" href="/u/kip" rel="nofollow">@kip</a> for the timely release of Localize. You can find it at <a href="https://multiadmin.octarion.eu" rel="noopener nofollow ugc">https://multiadmin.octarion.eu</a>.</p>
<p>Then I had a long conversation with Claude Code that led to a Nerves version for the OpenWRT One, <a href="https://hex.pm/packages/nerves_system_openwrt_one" class="inline-onebox" rel="nofollow">nerves_system_openwrt_one | Hex</a> . It is not complete, but please try it if you have the device.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="387205" 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/what-elixir-related-stuff-are-you-doing/113/900">Post #899</a>
	                </div>
	            </div>
              <div id="likers-container-387205" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387205"
                     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 #899"></div>
  </section>
</div>
    <div class="postbit" id="387215" data-post-id="387215">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://github.com/code-shoily/kino_vizjs" rel="noopener nofollow ugc">Kino Vizjs</a> - a VizJS based GraphViz rendering system for LiveBook.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="387215" 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/what-elixir-related-stuff-are-you-doing/113/901">Post #900</a>
	                </div>
	            </div>
              <div id="likers-container-387215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387215"
                     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 #900"></div>
  </section>
</div>
    <div class="postbit" id="387312" data-post-id="387312">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="kip" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/kip/120/1440_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  kip
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>ex_cldr Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Been doing lots of work on infrastructure to support MF2 messages - focused on syntax highlighting and syntax aware editing for now.</p>
<ul>
<li>
<p>Published my first ever nom package, <a href="https://www.npmjs.com/package/tree-sitter-mf2" rel="nofollow">tree-sitter-mf2</a> which is a <a href="https://tree-sitter.github.io/tree-sitter/" rel="nofollow">tree sitter</a> parser for <a href="https://messageformat.unicode.org" rel="nofollow">Unicode Message Format 2</a> messages. These are supported in <a href="https://hex.pm/packages/localize" rel="nofollow">Localize</a> but editing in a browser needed something more. Its fully conferment to the MF2 standard, parses all the conformance tests and includes all the editor bindings.</p>
</li>
<li>
<p>Built <a href="https://github.com/elixir-localize/mf2_wasm_editor" rel="nofollow">mf2_wasm_editor</a> which is an in-browser, wasm-based editor for MF2 messages that uses the <code>tree-sitter-mf2</code> parser.  You can see an example running on the updated <a href="https://playground.elixir-localize.com/messages" rel="nofollow">Localize Playground</a>. Not ready yet to publish as a separate npm package. But it might be useful to someone else. I have taken more care than usual to document how to wire it up, how to use themes and so on.</p>
</li>
<li>
<p>Built an <a href="https://github.com/elixir-localize/localize_mf2_treesitter" rel="nofollow">Elixir NIF-based tree-sitter parser</a> for MF2 as well. I thought that might be enough to support an editor in liveview but it was too slow. Might still be useful to someone.</p>
</li>
<li>
<p>Working now on <a href="https://github.com/elixir-localize/mf2_editor_extensions" rel="nofollow">editor extensions</a> for Zed, NeoVIM and others. Apart from syntax-aware editing of <code>.mf2</code> files, the idea is for the extensions to recognise Elixir <code>~M</code> sigils and invoke the MF2 extension on them so you can edit messages within Elixir text with auto-completion and syntax highlighting. I think that’s going to be cool.</p>
</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="387312" 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/what-elixir-related-stuff-are-you-doing/113/902">Post #901</a>
	                </div>
	            </div>
              <div id="likers-container-387312" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387312"
                     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 #901"></div>
  </section>
</div>
    <div class="postbit" id="387393" data-post-id="387393">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m going to try out the latest and trendiest language, Elixir. I’ll transform my IrisAgent project into a new, self-evolving Agents swarm platform using the new ECS architecture and the Elixir language. I’m calling it HivenBees.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="387393" 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/what-elixir-related-stuff-are-you-doing/113/903">Post #902</a>
	                </div>
	            </div>
              <div id="likers-container-387393" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="387393"
                     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 #902"></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/113/load_more?page=90">Load more posts (27 remaining)</a>
</div></template></turbo-stream>