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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is completely different story especially that the DSL would in fact render on the server-side. Hologram is supposed to work on everything it could on the client-side. This minimises server usage like in classic <code>SPA</code> with WebSocket connection.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359236" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-359236" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359236"
                     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="359237" data-post-id="359237">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The whole point is to write elixir on the client side no? This syntax reminds me very much of what <a href="https://hexdocs.pm/lustre/index.html" rel="noopener nofollow ugc">Lustre</a> is doing in the Gleam community and they managed to get that to compile to js. If elixir works then do end blocks also work, also I said a syntax “<em>like</em>” Temple anyway, not exactly Temple.</p>
<p>Finding a way of composing the UI in some way that’s native to your underlying language (in this case macros and functions) pays dividends and should be prioritized if it’s possible. It makes picking up UI building as simple as learning the language itself, provides autocomplete and ide support, is easy to extend with new features….</p>
<p>I guess if Elixir works on the client why wouldn’t composing your UI out of Elixir functions work?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359237" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-359237" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359237"
                     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="359238" data-post-id="359238">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="KP123" data-post="14" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>The whole point is to write elixir on the client side no?</p>
</blockquote>
</aside>
<p>It does not matter since the <code>DSL</code> is a macro call and the macros are evaluated in compile-time. In theory you can store DSL as <code>String</code> and evaluate it on the client-side, but this is exactly what templates do - just in different format.</p>
<p>As author mentioned he don’t have plans on supporting other formats as he want to focus on just one.</p>
<p>Also <code>do … end</code> block in practice looks very bad as you can’t tell what specific <code>end</code> is doing. It’s also not like that every DSL in <code>Elixir</code> needs to have many nested DSL calls, but in case of templates it’s a completely different story …</p>
<aside class="quote no-group" data-username="KP123" data-post="14" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>I guess if Elixir works on the client why wouldn’t composing your UI out of Elixir functions work?</p>
</blockquote>
</aside>
<p>The point is you want to replace <code>HTML</code> when the library aims to replace most of the <code>JavaScript</code> with <code>Elixir</code>. That’s also a completely different topic. At first I also liked <code>Temple</code>, but I can’t say a word for multiple <code>end</code> argument and I agree with the overall decision to move to templates. Maybe we could talk about <code>HAML</code>-like proposals, but unfortunately HTML templates could be way too nested and real world examples are not really readable.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359238" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-359238" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359238"
                     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="359240" data-post-id="359240">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="15" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p><code>do … end</code> block in practice looks very bad as you can’t tell what specific <code>end</code> is doing</p>
</blockquote>
</aside>
<p>This I’ll concede and I agree. But it’s something that can potentially be designed around if the overall feeling of how it’s used is something OP likes. That’s why I asked if something <strong>like</strong> it would be preferable.</p>
<aside class="quote no-group" data-username="Eiji" data-post="15" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Maybe we could talk about <code>HAML</code>-like proposals</p>
</blockquote>
</aside>
<p>This is a much more constructive response as instead of just dismissing a question for being asked it provides a path forward for more discussion. Like I stated above I’m not saying adopt Temple wholesale.</p>
<aside class="quote no-group" data-username="Eiji" data-post="15" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>As author mentioned he don’t have plans on supporting other formats as he want to focus on just one.</p>
</blockquote>
</aside>
<p>It’s hard to tell as the docs especially around templates and layouts are incomplete but just looking at the few examples listed the existing template language <em>looks like</em> heex. I’m not sure if <code>EEx.SmartEngine</code> is used in this project for templates but if it is Temple might <em>just work</em> already (haven’t tested it. I read this thread then immediately asked my question). And <em>if</em> it just works already then I think it’s a valid path to consider going forward</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359240" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-359240" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359240"
                     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="359241" data-post-id="359241">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="KP123" data-post="16" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>This I’ll concede and I agree. But it’s something that can potentially be designed around if the overall feeling of how it’s used is something OP likes. That’s why I asked if something <strong>like</strong> it would be preferable.</p>
</blockquote>
</aside>
<p>It’s not something we can “design”. We cannot change <code>do … end</code> syntax and without it we don’t have a nested <code>DSL</code>. Therefore the only solution left for nested document structure are templates. No matter if we like them or not.</p>
<aside class="quote no-group" data-username="KP123" data-post="16" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>This is a much more constructive response as instead of just dismissing a question for being asked it provides a path forward for more discussion. Like I stated above I’m not saying adopt Temple wholesale.</p>
</blockquote>
</aside>
<p>The point is you are mixing solutions. <code>HAML</code> is much more closer to <code>HEEX</code> and <code>Hologram</code> as all of them are templates (String). You have proposed using parts of language and it’s rather only possible to be done in <code>DSL</code>. DSL and templates are completely different topics.</p>
<aside class="quote no-group" data-username="KP123" data-post="16" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>It’s hard to tell as the docs especially around templates and layouts are incomplete but just looking at the few examples listed the existing template language <em>looks like</em> heex. I’m not sure if <code>EEx.SmartEngine</code> is used in this project for templates but if it is Temple might <em>just work</em> already (haven’t tested it. I read this thread then immediately asked my question). And <em>if</em> it just works already then I think it’s a valid path to consider going forward</p>
</blockquote>
</aside>
<p>This does not work as you think. As said DSL → macros → compile time. There is no other way to pass compile-time code to the client than storing said code as a String and evaluate it on the client. Compiling such String to JavaScript is also not an option:</p>
<ol>
<li>First of all it’s template</li>
<li>Secondly unless we would not validate <code>String</code> we can’t even say if it’s valid <code>Elixir</code> code</li>
<li>This makes it just another template - template with lots of <code>end</code> that we agreed are bad</li>
</ol>
<p>However compiling said code on client means implement complete <code>Elixir</code> parser and evaluator on the client side. The consequences of your proposal are unfortunately overcomplicated. I really like meta-programming, but there is no way it would be considered even in mid-term plans and everything after it is not clear most probably even for the author.</p>
<p>For sure I have suggested <code>Phoenix</code> template support, but only as a workaround to speed up adoption considering existing hex packages. Even in my suggestion this would be a partial support solution, so for real <code>Live</code>-like features the templates would have to be rewritten anyway - just a bit later.</p>
<p>What you propose would be something similar to what I asked for adoption purposes - there would be a raw <code>HTML</code> string send to the client and added to the existing element i.e. the code would not be send to the client and the evaluation would happen on server side. I don’t think <code>temple</code> have lots of hex packages we would like to support and rewrite letter when <code>Hologram</code>-specific features are needed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359241" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-359241" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359241"
                     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="359245" data-post-id="359245">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="17" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>It’s not something we can “design”. We cannot change <code>do … end</code> syntax and without it we don’t have a nested <code>DSL</code>.</p>
</blockquote>
</aside>
<p>Would a syntax LIKE Temple work. Not would Temples EXACT syntax work. I’m not proposing we change how <code>do end</code> work or that we use <code>do end</code> at all. In fact I’ve already agreed with you that I’d also like to get rid of <code>end</code> and by extension <code>do</code>. But would a syntax that looks like <code>html-element keyword-list: “of-attributes”</code>, <strong>similar</strong> to HAML and Temple, be preferable <strong>if possible</strong>?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359245" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-359245" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359245"
                     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="359247" data-post-id="359247">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Wait, I’m lost <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="KP123" data-post="14" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>Finding a way of composing the UI in some way that’s native to your underlying language (in this case macros and functions) pays dividends and should be prioritized if it’s possible. It makes picking up UI building as simple as learning the language itself, provides autocomplete and ide support, is easy to extend with new features….</p>
</blockquote>
</aside>
<p>That’s a description for the <code>DSL</code> - especially when you mention macros and functions.</p>
<aside class="quote no-group" data-username="KP123" data-post="18" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/k/278dde/48.png" class="avatar"> KP123:</div>
<blockquote>
<p>But would a syntax that looks like <code>html-element keyword-list: “of-attributes”</code>, <strong>similar</strong> to HAML and Temple, be preferable <strong>if possible</strong>?</p>
</blockquote>
</aside>
<p>That’s a description for the template.</p>
<p>Trust me there’s a huge difference here. The <code>Elixir</code> code is translated to <code>AST</code> (abstract syntax tree) then to <code>beam</code> files. On the other hand <code>HAML</code>-like templates would only imitate language - it would not be evaluated or verified as an <code>Elixir</code> code. Therefore as any other templates it would not provide autocomplete or IDE support out of the box.</p>
<p>Ok, so it’s not gonna be <code>DSL</code> <strong>like</strong> in <code>Temple</code> then we have one template vs another one. As said author does not plan to support multiple template formats and changing template format now is not likely to happen.</p>
<p>It would not give any benefit and only cost a lot of time to implement. You said that it would look like <code>Elixir</code>, but that’s impossible in <code>HAML</code> as we don’t write <code>do … end</code> and if we choose other format as said many <code>end</code> would look bad. So again in best case even if author would agree it would only <strong>imitate</strong> <code>Elixir</code> code.</p>
<p>I like <code>HAML</code> idea, but I’m not sure we can make it better than <code>HOLO</code> or <code>HEEX</code> template and keep <code>Elixir</code>-like syntax at the same time. If you say “Why we can’t just remove do … end” blocks then I would ask what with <code>id</code>? It’s common to use a hash for it, right? But in <code>Elixir</code> syntax it starts a comment. So we would also drop hash … Is it still <code>Elixir</code>-like syntax after such few changes? In my opinion there is no good solution here, but of course I may be wrong …</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359247" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-359247" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359247"
                     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="359249" data-post-id="359249">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="19" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>I like <code>HAML</code> idea, but I’m not sure we can make it better than <code>HOLO</code> or <code>HEEX</code> template and keep <code>Elixir</code>-like syntax at the same time. If you say “Why we can’t just remove do … end” blocks then I would ask what with <code>id</code>? It’s common to use a hash for it, right? But in <code>Elixir</code> syntax it starts a comment. So we would also drop hash … Is it still <code>Elixir</code>-like syntax after such few changes? In my opinion there is no good solution here, but of course I may be wrong …</p>
</blockquote>
</aside>
<p>This is basically what I wanted to get too. I would say that to my original question your answer would be yes you would like a syntax like temple if one were possible. Perhaps we have different aesthetic perspectives but to me haml is a syntax like temple, which is why I was confused when you suggested that, that one is a dsl and one a dumb template language are implementation details. They’re details that support my asking the question as they prove that there are different fundamental implementations for providing such a syntax.</p>
<p>So if you like the direction temple is heading in you could then say “I like these aspects of this temple. They help facilitate X,y,z. I have these constraints given the context, what can I build that gets me closest to X,y,z within my constraints?” It won’t be haml or temple. It will be whatever that solution is.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359249" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-359249" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359249"
                     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="359250" data-post-id="359250">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Another thought about syntax but a different perspective. You might not want to directly tie UI building to HTML at all. I’m unsure as to the scope of your project but if your goal is apps written in Elixir running anywhere you may want to take a leaf out of this weeks Javascript framework, <a href="https://lynxjs.org/guide/ui/elements-components.html" rel="noopener nofollow ugc">Lynx</a>, by ByteDance. Have a simplified set of tags that can be remapped to platform specific UI at runtime. It’s similar to how LiveView Native’s views works. If you come up with a good solution for marking accessibility you should be able to figure out how to map a generic <code>&lt;text&gt;</code> to <code>&lt;h1&gt;, &lt;p&gt;, etc</code> (perhaps <a href="https://developer.apple.com/documentation/swiftui/view-accessibility" rel="noopener nofollow ugc">Apple’s accessibility modifiers</a> can be of inspiration)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359250" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-359250" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359250"
                     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>
    <div class="postbit" id="359259" data-post-id="359259">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="bartblast" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bartblast/120/17647_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  bartblast
                    <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 class="user-title">
									<span>Creator of Hologram</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="11" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Wait, so <code>Phoenix</code> syntax in <code>heex</code> is confusing too?</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">
</code></pre>
</blockquote>
</aside>
<p>I meant that it would be confusing if we supported multiple syntaxes (e.g., Holo and HEEx), especially in such early stages ot the project. This could potentially confuse users.</p>
<aside class="quote no-group" data-username="Eiji" data-post="11" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Exactly, so if everything happens in action/command then we can do it without any extra API:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defp put_options(component, options) do
  value = if component.state.value in options, do: value, else: @default_value
  put_state(component, options: options, value: value)
end
</code></pre>
<p>Did I missed something? I do not see special watcher for <code>options</code> really necessary if we can just use such a simple function …</p>
</blockquote>
</aside>
<p>The action may be handled by some parent component, and as a result, props to some of its nested children may change. I prefer a more declarative approach versus an imperative one. The approach you suggested (if I understand it correctly) requires parent components to know something about their children - we want the actual component to react to its props changes independently.</p>
<aside class="quote no-group" data-username="Eiji" data-post="11" data-topic="69966">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Oh, I expected it as simple as:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"># hologram clause for render_template/1 goes here …

def render_template(%Phoenix.LiveView.Rendered{} = rendered) do
  rendered
  |&gt; rendered_to_raw()
  |&gt; render_template()
end

# raw i.e. safe HTML clause …
def render_template({:safe, html}) do
  # …
end
</code></pre>
<p>Does it cause a lot of problem for you?</p>
</blockquote>
</aside>
<p>Unfortunately, that’s a much more complex situation.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="359259" 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/hologram-roadmap-unveiled-the-path-to-elixirconf-2025-and-beyond/69966/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-359259" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="359259"
                     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 #21"></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/69966/load_more?page=3">Load more posts (4 remaining)</a>
</div></template></turbo-stream>