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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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>Yes, it will also require for rust NIF to have a way of piping keyboard/mouse inputs into renderers event system to be usable. I am aiming on making that API, it will require some time to make get it right.</p>
<p>Headless renderer opens up a lot of possibilities. Emerge already has video target on Linux that can receive DMA buffers using PRIME descriptors (basically a pointer into gpu memory with metadata of what that memory contains) and render it inside of an element. I plan for headless renderer to also be able to send Prime descriptors instead of RAW bytes.</p>
<p>That enables making pipelines of many Emerge renderers as well as easily making <a href="https://membrane.stream/" rel="noopener nofollow ugc">membrane</a> elements with Emerge and keeping it all in GPU as zero copy pipeline with DMA buffers. <a href="https://github.com/colibri-cam/membrane_video_surfaces" rel="noopener nofollow ugc">Here</a> is still very early work of my zero copy video decoder. I plan to expand it to work with all HW codecs certain hardware exposes both for decoding and encoding. It will take some time but I will release video demo once Windows support for emerge is made and when I figure out DMA equivalents on macOS and Windows so it can truly be cross platform.</p>
<p>That means you will be able to use Emerge in many different scenarios, for example:</p>
<ul>
<li>to draw overlays on top of video streams on server, and also make it really fast (low latency) if your server has GPU.</li>
<li>Implement your own VNC like system on top of few membrane elements.</li>
<li>pipe output GUI output as a video into existing VNC server.</li>
<li>Bulid desktop OBS like clone fully in elixir.</li>
<li>This building blocks should even allow you to build something like DaVinci Resolve, where you split various tasks over multiple headless renderers that stitch it together so you can utilize all of the hardware available in parallel.</li>
</ul>
<p>Since Solve as state management is not directly attached to any Emerge viewport/renderer that gives you freedom to have one Solve app to orchestrate many Emerge renderers and vice versa, one Emerge renderer to pull from many solve apps.</p>
<p>IMO it is better to run user facing UI directly on device that user interacts with than having user remote into some UI via VNC.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388570" 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/emerge-solve-a-gui-framework-for-elixir/74953/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-388570" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388570"
                     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 #11"></div>
  </section>
</div>
    <div class="postbit" id="388573" data-post-id="388573">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>hey <a class="mention" href="/u/damirados" rel="nofollow">@Damirados</a> <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"><br>
how does this compare to <a href="https://github.com/ScenicFramework/scenic" rel="noopener nofollow ugc">scenic</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="388573" 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/emerge-solve-a-gui-framework-for-elixir/74953/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-388573" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388573"
                     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="388575" data-post-id="388575">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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>My first attempt started by making on top of Scenic and Emerge is kinda spiritual successor to Scenic.</p>
<p>I made <a href="https://github.com/colibri-cam/scenic_driver_skia" rel="noopener nofollow ugc">scenic driver on top of skia</a> to keep it GPU accelerated (compared to current cairo efforts) and more portable with better text rendering.</p>
<p>From usage perspective scenic lacks layout engine and it’s state management is intertwined with UI.<br>
I attempted to make layout engine on top of scenic but very quickly realized Rust is better suited language to write layout engine in than Elixir and I had ideas for event system, scrolling and animations where having Scenic in the middle just got in the way.</p>
<p>A lot of ideas are taken from Scenic (serialization of UI tree, multiple backends…).<br>
Also, there is no way you can have high fps scrolling and/or animations if you drive them from elixir, crossing the NIF/port boundary is just too expensive.</p>
<p>I think Scenic is conceptually really cool idea but every time I tried to build UI in Scenic over past few years it felt hard, messy and took a lot of time to get any UI going. I guess that UX of using it is why it never got popular in the first place.</p>
<p>As Emerge is basically UI framework by myself to myself. It sits on a level of abstraction where it solves layouting scrolling, animating and event resolution but it still gives me control over everything else. With having 1 way to do the things like centering text into element or implementing a dropdown menu and without having any default styling or components (currently in text input selection highlighting is only default and not configurable part).</p>
<p>For example there is no checkbox or radio_button element since they are trivial to implement on top of <code>Input.button</code>, but there is Input.slider as that involves dealing with math that calculates widths of slider tracks and positioning of a thumb.</p>
<p>Basically if I sit down in the morning I like to have GUI app with dozen of screens by evening in more or less production ready state. And it hasn’t been like that since I was working in elm with elm-ui years ago.</p>
<p>I am still thinking if Emerge 2D canvas API should just be Scenic graphs since I already have a Rust lib that renders it with skia. If I go that way I will still make it in a way that discourages local state related to that UI.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388575" 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/emerge-solve-a-gui-framework-for-elixir/74953/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-388575" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388575"
                     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="388576" data-post-id="388576">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for your reply!</p>
<p>We are currently using Scenic on top of Nerves to display a dynamic transparent overlay over an H.264 video (kiosk mode). It relies entirely on DispmanX, which is now deprecated and no longer works on recent kernels.</p>
<p>I’m wondering whether Emerge could help us achieve the same result, ideally with hardware-accelerated H.264/H.265 decoding.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388576" 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/emerge-solve-a-gui-framework-for-elixir/74953/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-388576" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388576"
                     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="388577" data-post-id="388577">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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 actually have a working demo of H265 decoding pipeline with membrane that displays dynamic transparent overlay, all zero-copy and GPU accelerated. I will try to clean it up and upload it as new emerge demo sooner than macOS video work is finished then, may take a week or two.</p>
<p>What nerves device are you currently using? Emerge currently requires GPU with atomic mode setting for DRM backend, that means rpi4 and rpi5 or mostly any arrch64 device that has working gpu drivers. in the future I will enable legacy mode setting to bring it to older devices and add precompiled arm 32 bit builds into release. There is a limit on how many things I can work on in parallel though so this may take some time.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388577" data-batch-url="/posts/batch_likers">
                        4
                      </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/emerge-solve-a-gui-framework-for-elixir/74953/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-388577" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388577"
                     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="388578" data-post-id="388578">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>We’re running on rpi3.</p>
<p>A solution working on rpi4/rpi5 would be fine, because eventually we’ll need to support these devices (how long will rpi3 still be produced?)</p>
<p>A solution working on rpi3 / rpi4 / rpi5 would be the ideal!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388578" 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/emerge-solve-a-gui-framework-for-elixir/74953/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-388578" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388578"
                     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="388579" data-post-id="388579">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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>rpi3 does support atomic mode setting when using <code>dtoverlay=vc4-kms-v3d</code>. I do have one at home. I will need to test it out and see what changes are needed to the default nerves system. It may be a good time to try out <a href="https://github.com/jimsynz/nbpr" class="inline-onebox" rel="noopener nofollow ugc">GitHub - jimsynz/nbpr: Nerves Binary Package Repository · GitHub</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="388579" 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/emerge-solve-a-gui-framework-for-elixir/74953/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-388579" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388579"
                     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="390099" data-post-id="390099">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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><a href="https://github.com/emerge-elixir/emerge" rel="noopener nofollow ugc">Emerge</a> 0.3.2 is out. It contains few bug fixes compared to 0.3.1 and some more performance improvements.</p>
<p>That being said everything else on the roadmap mentioned with 0.3.1 release has been put on hold and next release is likely few months away. <a class="mention" href="/u/cblavier" rel="nofollow">@cblavier</a> That includes video example.</p>
<p>I consider where both projects are now a very successful proof of concept. The term I like to use is MVS (Minimum viable slop)</p>
<p>Developer facing APIs turned out pretty much how I wanted.<br>
Internally, general architecture is OK but code is horrendous and I don’t see a point in continuing adding anything on top of it.</p>
<p>I am doing full deslopification phase. I have started from an empty project and am redoing it all by hand.</p>
<p>Still leveraging AI for a lot of stuff here but it is not allowed to modify any files in the repo.</p>
<p>There should be no breaking changes introduced by the rewrite and I encourage you try it out if you need UI for your Nerves project, please do report any bugs you find. I am sure there are some introduced cached layout and rendering as caching is too hard of a problem for AI to tackle.</p>
<p>Nerves meetup EU recording will be out soon so watch out for it if you are interested in whys and hows behind this project.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="390099" data-batch-url="/posts/batch_likers">
                        6
                      </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/emerge-solve-a-gui-framework-for-elixir/74953/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-390099" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="390099"
                     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="390103" data-post-id="390103">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice!<br>
I’ll test Emerge on Nerves very soon and let you know how it goes</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="390103" 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/emerge-solve-a-gui-framework-for-elixir/74953/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-390103" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="390103"
                     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="392232" data-post-id="392232">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Damirados" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Damirados/120/36402_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Damirados
                    <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>Time to chime in again.</p>
<h3><a name="p-392232-emerge-slop-version-updates-1" class="anchor" href="#p-392232-emerge-slop-version-updates-1" aria-label="Heading link" rel="nofollow"></a>Emerge slop version updates</h3>
<p><a href="https://github.com/emerge-elixir/emerge" rel="noopener nofollow ugc">Emerge</a> 0.3.4 is out. Containing few very obvious rendering and layout bugs.</p>
<p>There will be one more series of slop Emerge with 0.4.0. Bringing in zero copy video examples and headless rendering. Coming in a few weeks mostly because I want to have some cool nerves camera demos powered by membrane and emerge at the <a href="https://goatmire.com/" rel="noopener nofollow ugc">Goatmire</a> conference. <a class="mention" href="/u/cblavier" rel="nofollow">@cblavier</a> that will include video demos for nerves devices.</p>
<p>I did <a href="https://www.youtube.com/watch?v=0uDlsoPpoFE" rel="noopener nofollow ugc">very long semi unstructured yap on nerves meetup eu</a>. So check it out if you are interested. Goatmire talk is going to be very different and will focus much more on Solve than Emerge as IMO Emerge learning curve is basically 0 while Solve can be mind bending.</p>
<h3><a name="p-392232-solve-updates-2" class="anchor" href="#p-392232-solve-updates-2" aria-label="Heading link" rel="nofollow"></a>Solve updates</h3>
<p><a href="https://github.com/emerge-elixir/solve" rel="noopener nofollow ugc">Solve</a> 0.2.1 has been out for a few weeks fixing quite big bug with dependencies and re-subscriptions between controllers. Thanks to <a class="mention" href="/u/ken-kost" rel="nofollow">@ken-kost</a> for working on Solve-LiveView and testing the core library out properly. I’m looking forward to the release of it in the future. It will make complex single page LiveView apps much more enjoyable to develop.</p>
<h3><a name="p-392232-artisanal-handcrafted-emerge-version-progress-3" class="anchor" href="#p-392232-artisanal-handcrafted-emerge-version-progress-3" aria-label="Heading link" rel="nofollow"></a>Artisanal handcrafted Emerge version progress</h3>
<p>I have been busy over past 2 months with rewriting Emerge from blank slate. Progress is slow but steady, work is not public yet. I will share the first version when I get it to rendering stuff on the screen.</p>
<p>I started with what I considered the hardest part, incremental layout/rendering engine in Rust. It took me 2 months of spending every spare minute of my free time, but I finally have data structures and core algorithm that enables following pipeline:</p>
<pre><code class="lang-plaintext">EMRG binary patch (serialized UI definition)
 -&gt; Internal tree update
 -&gt; layout recompute
 -&gt; render operations recompute
</code></pre>
<p>to traverse only affected elements for each layout/paint pass with every lookup and queue operation on the hot path being roughly O(1), with 0 heap memory allocations along the way.</p>
<p>That being said complete rewrite is many months away. All of the work that comes after this is easier but there is incredible amount of it to reach feature parity with current slop version.</p>
<p>If anyone is interested in learning about layout engines and helping out with implementing specific layout functions in Rust, reach out. There will be quite a few to implement. Each one in isolation is not that complex.</p>
<h3><a name="p-392232-community-efforts-4" class="anchor" href="#p-392232-community-efforts-4" aria-label="Heading link" rel="nofollow"></a>Community efforts</h3>
<p>I have already mentioned Solve-LiveView adapter, there is also a community initiative of mobile app development with emerge going on quietly in the background. Similar to what mob is doing but without bloat of the <em>“native”</em> mobile SDKs standing in the way. It will not be ready that soon but it is chugging along.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="392232" data-batch-url="/posts/batch_likers">
                        6
                      </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/emerge-solve-a-gui-framework-for-elixir/74953/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-392232" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="392232"
                     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/74953/load_more?page=3">Load more posts (3 remaining)</a>
</div></template></turbo-stream>