<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: dashersw</title><link>https://news.ycombinator.com/user?id=dashersw</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 23 Sep 2026 00:11:21 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=dashersw" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>Watch the demo videos here: <a href="https://www.youtube.com/watch?v=uCfFTZSG-PQ&list=PL9pDl_Oth4crgIcBiX-mdMS9vtzIt-eDT" rel="nofollow">https://www.youtube.com/watch?v=uCfFTZSG-PQ&list=PL9pDl_Oth4...</a><p>The code is on GitHub, for example for the first video that renders a 3D cube with CSS the code is at <a href="https://github.com/geastack/examples/tree/main/apps/css-3d-cube" rel="nofollow">https://github.com/geastack/examples/tree/main/apps/css-3d-c...</a>. It takes only a couple of CLI commands to get it running. For reference, I'm using a WaveShare ESP32-S3 AMOLED Touch 2.06" device here, but the same code renders on every target Gea compiles for.</p>
]]></description><pubDate>Tue, 22 Sep 2026 23:13:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49809584</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49809584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49809584</guid></item><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>It compiles TypeScript statically to C++, there's no JS engine or VM running.</p>
]]></description><pubDate>Tue, 22 Sep 2026 23:04:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=49809508</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49809508</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49809508</guid></item><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>It defers to platform defaults, Android compositor, UIKit/AppKit native views or CoreGraphics for the canvas on Apple platforms, GDI/GDI+ on Windows, whatever SDL2 chooses on Linux. If you have a Three.js app, it uses Metal on iOS and macOS, Direct3D 11 (open) and 12 (commercial license) on Windows and XBox.</p>
]]></description><pubDate>Tue, 22 Sep 2026 22:27:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=49809130</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49809130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49809130</guid></item><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>It supports Gea frontends (<a href="https://geajs.com" rel="nofollow">https://geajs.com</a>). Technically it could compile React with a plugin, but that is left to the community as an exercise :)</p>
]]></description><pubDate>Tue, 22 Sep 2026 22:19:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49809028</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49809028</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49809028</guid></item><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>It also supports iOS, macOS, Android, Windows, Linux, XBox for Three.js games, as well as (some) Node.js apps.</p>
]]></description><pubDate>Tue, 22 Sep 2026 20:41:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=49807780</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49807780</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49807780</guid></item><item><title><![CDATA[New comment by dashersw in "Native apps written in TypeScript and CSS"]]></title><description><![CDATA[
<p>Each platform has its native bindings. For graphics, you write CSS and HTML canvas API as well as JSX, it renders to native components and their alignments, the canvas API is converted to native surfaces, whatever the platform uses.</p>
]]></description><pubDate>Tue, 22 Sep 2026 20:28:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=49807619</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=49807619</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49807619</guid></item><item><title><![CDATA[New comment by dashersw in "The Age of Personalized Hardware Is Coming"]]></title><description><![CDATA[
<p>It is real :)</p>
]]></description><pubDate>Mon, 06 Jul 2026 10:15:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48802736</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=48802736</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48802736</guid></item><item><title><![CDATA[New comment by dashersw in "The Age of Personalized Hardware Is Coming"]]></title><description><![CDATA[
<p>Here is the author of Gea Stack. There is no browser in the device, none of these devices could run one with 512KB of RAM (+2-8MB of PSRAM). We instead transpile TypeScript and CSS into native code, so the UI you build with web technologies look and behave identical on a microcontroller.</p>
]]></description><pubDate>Mon, 06 Jul 2026 10:14:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48802731</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=48802731</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48802731</guid></item><item><title><![CDATA[New comment by dashersw in "OpenStreetMap running on an ESP32 with TypeScript and Canvas [video]"]]></title><description><![CDATA[
<p>Yes, exactly. We also have iOS and macOS targets, so a direct competitor to React Native as well.</p>
]]></description><pubDate>Fri, 26 Jun 2026 10:23:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48684830</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=48684830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48684830</guid></item><item><title><![CDATA[New comment by dashersw in "OpenStreetMap running on an ESP32 with TypeScript and Canvas [video]"]]></title><description><![CDATA[
<p>Thank you! I am the guy on the video. We will be open sourcing Gea Stack next month, and in the meantime I am showcasing the examples we've built so far. The underlying framework, Gea, is already available for the web on <a href="https://geajs.com" rel="nofollow">https://geajs.com</a>.</p>
]]></description><pubDate>Thu, 25 Jun 2026 15:36:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48675033</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=48675033</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48675033</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>I am pondering about this, but would love to see an example to make it more concrete. The way I see it is that this reactivity is completely on the compiler's side, and there's no more ambiguity or pitfalls than misrepresenting a dependency array in a react hook.</p>
]]></description><pubDate>Wed, 25 Mar 2026 13:56:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47517412</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47517412</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47517412</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>Yeah, sure :)</p>
]]></description><pubDate>Wed, 25 Mar 2026 13:53:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47517378</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47517378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47517378</guid></item><item><title><![CDATA[New comment by dashersw in "[dead]"]]></title><description><![CDATA[
<p>As an open-source builder and a streamer, I'm afraid I will leak keys on stream any time soon. And fun story—I did leak the API keys to my smart lights once, and the company (Govee) had a 30-day grace period for any revoked keys!<p>It still looks too tedious to manage all this—curious to see if there's an easier way. Currently I use 1Password in my teams to share .env config, but we basically c/p to local git folders, so there's still a lot to lose.<p>I'm especially worried about the growing number of supply chain attacks. Curious to see how you tackle these.</p>
]]></description><pubDate>Wed, 25 Mar 2026 13:07:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47516852</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47516852</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47516852</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>Feel free to question anything you like and I'll help you find the answers.<p>This is a well-trodden path. All aspects of object mutation and its effects are obvious and well-known. What is pass by ref and what is pass by val is also pretty obvious. One can easily pass in primitive values and not worry about two-way binding if they choose to. One can also easily <i>not</i> mutate any props they receive from their parents. This is already the best practice in eslint for like 10 years. This is not easy, this is trivial.<p>I'd rather see some real concerns.</p>
]]></description><pubDate>Tue, 24 Mar 2026 00:44:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47497284</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47497284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47497284</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>I don't want to recurse into philosophy but one could argue an assignment is more declarative than a function call :) Solid is function calls everywhere, and extra code, vs plain objects.</p>
]]></description><pubDate>Mon, 23 Mar 2026 21:50:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47495590</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47495590</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47495590</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>I see your point. I designed Gea to be one-way binding only first, and then decided to add two-way binding for props passed as objects. People can still easily only use one-way binding. Maybe this becomes a preference in the compiler config?<p>The argument for Gea to support two-way binding is basically circular and I believe well-made at this point. I want a framework to respect a language. Breaking two-way binding when it's a concept in the underlying language is like breaking Liskov's Substitution Principle. You can do it, but you probably shouldn't.<p>JSX is more succinct and efficient than raw DOM API because it's declarative, where the raw API is imperative.</p>
]]></description><pubDate>Mon, 23 Mar 2026 13:48:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=47489504</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47489504</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47489504</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>Thank you for the discussion, I find it very interesting and I'd love to understand how you think. Why do you think setStore and produce let you model your application more succinctly and efficiently than just a direct assignment?<p>And what kind of types of boilerplate do you see Gea is opting out of?</p>
]]></description><pubDate>Mon, 23 Mar 2026 11:59:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47488251</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47488251</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47488251</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>It's like get-ah (but without the t).</p>
]]></description><pubDate>Mon, 23 Mar 2026 09:27:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47487081</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47487081</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47487081</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>Gea in fact supports regular HTML strings out of the box—that's what the compiler turns the JSX into anyway. However IDE tooling is still in the works for syntax highlighting regular HTML.<p>What syntax would you prefer from Svelte? Like for hooks / stores, or rendering?</p>
]]></description><pubDate>Mon, 23 Mar 2026 03:52:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47485330</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47485330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47485330</guid></item><item><title><![CDATA[New comment by dashersw in "JavaScript Is Enough"]]></title><description><![CDATA[
<p>Heh, sorry, I (the author) wasn't the one who created the post. But the idea is reactivity in JS shouldn't require new syntax.<p>Gea works best with the compiler, I documented a non-compiled (only compiles JSX) browser usage here: <a href="https://geajs.com/docs/browser-usage.html" rel="nofollow">https://geajs.com/docs/browser-usage.html</a> but this obviously requires manual store observers and manual DOM updates, which means it's not _really_ benefiting from Gea.</p>
]]></description><pubDate>Mon, 23 Mar 2026 03:03:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47485073</link><dc:creator>dashersw</dc:creator><comments>https://news.ycombinator.com/item?id=47485073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47485073</guid></item></channel></rss>