{"exhaustive":{"nbHits":false,"typo":false},"exhaustiveNbHits":false,"exhaustiveTypo":false,"hits":[{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ryanmerket"},"title":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"<em>Runlayer</em> sues Rippling, alleging source-code access preceded rival AI gateway"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://runtimewire.com/article/<em>runlayer</em>-sues-rippling-alleging-source-code-access-preceded-rival-ai-gateway"}},"_tags":["story","author_ryanmerket","story_49102354"],"author":"ryanmerket","created_at":"2026-07-29T20:07:17Z","created_at_i":1785355637,"num_comments":0,"objectID":"49102354","points":3,"story_id":49102354,"title":"Runlayer sues Rippling, alleging source-code access preceded rival AI gateway","updated_at":"2026-07-30T00:25:40Z","url":"https://runtimewire.com/article/runlayer-sues-rippling-alleging-source-code-access-preceded-rival-ai-gateway"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"XiaHua"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"I will definitely checkout <em>Runlayer</em> Watch in depth. It seems that it works with coding agents but not web-based agents yet. We've had customers comparing the two solutions. They liked the depth of discovery and the open-source security scanning capabilities.<p>And I know Harold well at Bluerock. I totally agree that the market is crowded and will only get more crowded which is a good sign that the problem is real.<p>And yes I totally agree with you that differentiation is the key. I can't say that we have figured this out 100% but our approach is always community first, open-source first. I hope that is the right direction in the long run."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps"}},"_tags":["comment","author_XiaHua","story_48937020"],"author":"XiaHua","comment_text":"I will definitely checkout Runlayer Watch in depth. It seems that it works with coding agents but not web-based agents yet. We&#x27;ve had customers comparing the two solutions. They liked the depth of discovery and the open-source security scanning capabilities.<p>And I know Harold well at Bluerock. I totally agree that the market is crowded and will only get more crowded which is a good sign that the problem is real.<p>And yes I totally agree with you that differentiation is the key. I can&#x27;t say that we have figured this out 100% but our approach is always community first, open-source first. I hope that is the right direction in the long run.","created_at":"2026-07-16T19:55:33Z","created_at_i":1784231733,"objectID":"48939450","parent_id":48939206,"story_id":48937020,"story_title":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps","updated_at":"2026-07-17T14:23:12Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gk1"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Not exactly. See: <a href=\"https://www.runlayer.com/watch\" rel=\"nofollow\">https://www.<em>runlayer</em>.com/watch</a><p>There's also Bluerock, as yet another example. I've worked with both companies though I get nothing from mentioning them here. My point is this is a (suddenly) crowded market - perhaps more so than you realized - so you should consider  what exactly is different about your product and why that matters, and then make that obvious to prospective buyers."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps"}},"_tags":["comment","author_gk1","story_48937020"],"author":"gk1","children":[48939450],"comment_text":"Not exactly. See: <a href=\"https:&#x2F;&#x2F;www.runlayer.com&#x2F;watch\" rel=\"nofollow\">https:&#x2F;&#x2F;www.runlayer.com&#x2F;watch</a><p>There&#x27;s also Bluerock, as yet another example. I&#x27;ve worked with both companies though I get nothing from mentioning them here. My point is this is a (suddenly) crowded market - perhaps more so than you realized - so you should consider  what exactly is different about your product and why that matters, and then make that obvious to prospective buyers.","created_at":"2026-07-16T19:35:53Z","created_at_i":1784230553,"objectID":"48939206","parent_id":48937975,"story_id":48937020,"story_title":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps","updated_at":"2026-07-17T14:23:12Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"XiaHua"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"<em>Runlayer</em> can be a fit once you know what you want to put behind an MCP gateway.<p>The challenge we hear from customers is that they don't know what AI apps, MCPs, or tools their employees are actually using. And new things just keep popping up everyday. Without that visibility, it's difficult to know where to apply controls."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps"}},"_tags":["comment","author_XiaHua","story_48937020"],"author":"XiaHua","children":[48939206],"comment_text":"Runlayer can be a fit once you know what you want to put behind an MCP gateway.<p>The challenge we hear from customers is that they don&#x27;t know what AI apps, MCPs, or tools their employees are actually using. And new things just keep popping up everyday. Without that visibility, it&#x27;s difficult to know where to apply controls.","created_at":"2026-07-16T18:01:32Z","created_at_i":1784224892,"objectID":"48937975","parent_id":48937839,"story_id":48937020,"story_title":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps","updated_at":"2026-07-16T21:10:55Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gk1"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"+1<p>You're facing competition from both the incumbents who can ship these capabilites to their massive userbase, and emerging startups like <em>Runlayer</em> who are running away with the AI-native segment.<p>What are you offering that people want yet neither of those classes of solutions offer?"},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps"}},"_tags":["comment","author_gk1","story_48937020"],"author":"gk1","children":[48937975],"comment_text":"+1<p>You&#x27;re facing competition from both the incumbents who can ship these capabilites to their massive userbase, and emerging startups like Runlayer who are running away with the AI-native segment.<p>What are you offering that people want yet neither of those classes of solutions offer?","created_at":"2026-07-16T17:51:23Z","created_at_i":1784224283,"objectID":"48937839","parent_id":48937020,"story_id":48937020,"story_title":"Launch HN: Traceforce (YC S26) \u2013 Company-wide security monitoring for AI apps","updated_at":"2026-07-16T21:15:55Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"xtacy"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Nice writeup, but it leaves me curious about the root cause:<p>For some reason, our switches were unable to learn a significant percentage of our MAC addresses and this aggregate traffic was enough to saturate all of the links between the access and aggregation switches, causing the poor performance we saw throughout the day.<p>Did you work with your vendor to understand what caused the above problem?  Was it a lack of number of entries in the MAC table?<p>This problem aside, I am wondering why you still <em>run layer</em> 2 network in a tree-like configuration.  These are known not to scale well, beyond a small LAN.  An appropriate layer 3 network (with multipath routing) would ensure there is no such flooding, and ensure you use all the precious capacity in your switches!"},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Network problems last Friday"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://github.com/blog/1346-network-problems-last-friday"}},"_tags":["comment","author_xtacy","story_4877999"],"author":"xtacy","children":[4878270],"comment_text":"Nice writeup, but it leaves me curious about the root cause:<p>For some reason, our switches were unable to learn a significant percentage of our MAC addresses and this aggregate traffic was enough to saturate all of the links between the access and aggregation switches, causing the poor performance we saw throughout the day.<p>Did you work with your vendor to understand what caused the above problem?  Was it a lack of number of entries in the MAC table?<p>This problem aside, I am wondering why you still run layer 2 network in a tree-like configuration.  These are known not to scale well, beyond a small LAN.  An appropriate layer 3 network (with multipath routing) would ensure there is no such flooding, and ensure you use all the precious capacity in your switches!","created_at":"2012-12-05T20:02:06Z","created_at_i":1354737726,"objectID":"4878233","parent_id":4877999,"story_id":4877999,"story_title":"Network problems last Friday","story_url":"https://github.com/blog/1346-network-problems-last-friday","updated_at":"2024-09-19T19:09:39Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"0907"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"hadn't heard of <em>runlayer</em>, but it does make sense. I'm a huge advocate of skills based on the company/process or project owners perspectives and workflow habits rather than using skills.sh or similar. You will end up cosplaying as someone elses perspective and wonder why you don't understand it.."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"MCP Is Dead"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://www.quandri.io/engineering-blog/mcp-is-dead"}},"_tags":["comment","author_0907","story_48330436"],"author":"0907","comment_text":"hadn&#x27;t heard of runlayer, but it does make sense. I&#x27;m a huge advocate of skills based on the company&#x2F;process or project owners perspectives and workflow habits rather than using skills.sh or similar. You will end up cosplaying as someone elses perspective and wonder why you don&#x27;t understand it..","created_at":"2026-05-29T23:51:06Z","created_at_i":1780098666,"objectID":"48330856","parent_id":48330613,"story_id":48330436,"story_title":"MCP Is Dead","story_url":"https://www.quandri.io/engineering-blog/mcp-is-dead","updated_at":"2026-05-30T00:05:53Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gk1"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Exactly right. Co\u2019s like <em>Runlayer</em> are growing like wild exactly for this reason. Without a central control plane MCP is a minefield."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"MCP is dead?"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://www.quandri.io/engineering-blog/mcp-is-dead"}},"_tags":["comment","author_gk1","story_48330436"],"author":"gk1","children":[48330856],"comment_text":"Exactly right. Co\u2019s like Runlayer are growing like wild exactly for this reason. Without a central control plane MCP is a minefield.","created_at":"2026-05-29T23:15:41Z","created_at_i":1780096541,"objectID":"48330613","parent_id":48330571,"story_id":48330436,"story_title":"MCP is dead?","story_url":"https://www.quandri.io/engineering-blog/mcp-is-dead","updated_at":"2026-05-30T01:51:53Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"catblast01"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"This is really reaching. Channelization as being referred to upthread in reference to SSH or RDP is a protocol level abstraction, rs485 bussing is at the electrical level for multiple physical devices and also doesn\u2019t specify any addressing scheme, that would be specified as a higher level protocol (that could be done <i>just as well</i> over rs-232). Device addressing and channelization are not even logically the same thing.<p>Ethernet as it is typically deployed is not a bus either but it is used in channelized communication (packet switched no less) just fine.<p>Edit: responding to your edit. The point still stands this is orthogonal to the physical or electrical layer. The vast vast majority of the internet including Ethernet and fiber links are point to point and clearly they carry a tremendous number of separate streams, and a small amount of broadcast. You can <em>run layer</em> 2 over an RS-232C serial port, whether its Ethernet, PPP, SLIP or ATM. In Linux PPP is in fact implemented as a tty line discipline.<p>As for RS-485, there are widely used standards such as DMX512. It is not a strongly supported idea to put this stuff in the kernel, when performance in user space is sufficient.<p>Finally, RS-232 can do the same thing (multidrop) with electrical repeaters. See MAX3322 eg."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"The TTY Demystified (2008)"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"http://www.linusakesson.net/programming/tty/index.php"}},"_tags":["comment","author_catblast01","story_26803109"],"author":"catblast01","comment_text":"This is really reaching. Channelization as being referred to upthread in reference to SSH or RDP is a protocol level abstraction, rs485 bussing is at the electrical level for multiple physical devices and also doesn\u2019t specify any addressing scheme, that would be specified as a higher level protocol (that could be done <i>just as well</i> over rs-232). Device addressing and channelization are not even logically the same thing.<p>Ethernet as it is typically deployed is not a bus either but it is used in channelized communication (packet switched no less) just fine.<p>Edit: responding to your edit. The point still stands this is orthogonal to the physical or electrical layer. The vast vast majority of the internet including Ethernet and fiber links are point to point and clearly they carry a tremendous number of separate streams, and a small amount of broadcast. You can run layer 2 over an RS-232C serial port, whether its Ethernet, PPP, SLIP or ATM. In Linux PPP is in fact implemented as a tty line discipline.<p>As for RS-485, there are widely used standards such as DMX512. It is not a strongly supported idea to put this stuff in the kernel, when performance in user space is sufficient.<p>Finally, RS-232 can do the same thing (multidrop) with electrical repeaters. See MAX3322 eg.","created_at":"2021-04-15T04:53:02Z","created_at_i":1618462382,"objectID":"26816308","parent_id":26815997,"story_id":26803109,"story_title":"The TTY Demystified (2008)","story_url":"http://www.linusakesson.net/programming/tty/index.php","updated_at":"2024-09-20T08:20:29Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"paulddraper"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"QUIC is the transport layer (layer 4).<p>&gt; QUIC is an experimental transport layer network protocol [1]<p>You can <em>run layer</em> 4 on top of layer 4. (Just as you could say, run TCP layer 4 on top of HTTP layer 7.)<p>[1] <a href=\"https://en.wikipedia.org/wiki/QUIC\" rel=\"nofollow\">https://en.wikipedia.org/wiki/QUIC</a>"},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Building Protocols with HTTP"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-06"}},"_tags":["comment","author_paulddraper","story_17569715"],"author":"paulddraper","comment_text":"QUIC is the transport layer (layer 4).<p>&gt; QUIC is an experimental transport layer network protocol [1]<p>You can run layer 4 on top of layer 4. (Just as you could say, run TCP layer 4 on top of HTTP layer 7.)<p>[1] <a href=\"https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;QUIC\" rel=\"nofollow\">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;QUIC</a>","created_at":"2018-07-20T16:06:03Z","created_at_i":1532102763,"objectID":"17576199","parent_id":17573412,"story_id":17569715,"story_title":"Building Protocols with HTTP","story_url":"https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-06","updated_at":"2024-09-20T02:49:22Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gk1"},"title":{"matchLevel":"none","matchedWords":[],"value":"Pwning OpenClaw in 50 Messages"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://www.<em>runlayer</em>.com/blog/pwning-openclaw-in-50-messages"}},"_tags":["story","author_gk1","story_47360980"],"author":"gk1","created_at":"2026-03-13T05:18:36Z","created_at_i":1773379116,"num_comments":0,"objectID":"47360980","points":2,"story_id":47360980,"title":"Pwning OpenClaw in 50 Messages","updated_at":"2026-03-13T05:54:39Z","url":"https://www.runlayer.com/blog/pwning-openclaw-in-50-messages"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gk1"},"title":{"matchLevel":"none","matchedWords":[],"value":"MCP Doesn't \"Suck\""},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://www.<em>runlayer</em>.com/blog/mcp-vs-cli-for-ai-agents"}},"_tags":["story","author_gk1","story_47360972"],"author":"gk1","created_at":"2026-03-13T05:17:29Z","created_at_i":1773379049,"num_comments":0,"objectID":"47360972","points":2,"story_id":47360972,"title":"MCP Doesn't \"Suck\"","updated_at":"2026-03-13T13:33:26Z","url":"https://www.runlayer.com/blog/mcp-vs-cli-for-ai-agents"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"gautema"},"story_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"I wanted to do something fun in Elixir and ended up building a localhost tunnel. I've used ngrok for showing my local dev to others and testing webhooks, but figured I'd see what I could make myself.<p>npx runlocal 3000 - Gives you a public HTTPS URL forwarding to localhost. No account, no config.<p>It's a single Phoenix app using WebSocket to relay HTTP in real time. No database, no Redis. Fully open source, EU owned and hosted, MIT licensed. Please give feedback<p>Code is hosted at github: <a href=\"https://github.com/runlater-eu/runlocal-server\" rel=\"nofollow\">https://github.com/<em>runlater</em>-eu/runlocal-server</a>"},"title":{"matchLevel":"none","matchedWords":[],"value":"Show HN: Runlocal \u2013 Open-source localhost tunnel, no signup, no tracking"},"url":{"matchLevel":"none","matchedWords":[],"value":"https://runlocal.eu"}},"_tags":["story","author_gautema","story_47253368","show_hn"],"author":"gautema","created_at":"2026-03-04T20:30:46Z","created_at_i":1772656246,"num_comments":0,"objectID":"47253368","points":1,"story_id":47253368,"story_text":"I wanted to do something fun in Elixir and ended up building a localhost tunnel. I&#x27;ve used ngrok for showing my local dev to others and testing webhooks, but figured I&#x27;d see what I could make myself.<p>npx runlocal 3000 - Gives you a public HTTPS URL forwarding to localhost. No account, no config.<p>It&#x27;s a single Phoenix app using WebSocket to relay HTTP in real time. No database, no Redis. Fully open source, EU owned and hosted, MIT licensed. Please give feedback<p>Code is hosted at github: <a href=\"https:&#x2F;&#x2F;github.com&#x2F;runlater-eu&#x2F;runlocal-server\" rel=\"nofollow\">https:&#x2F;&#x2F;github.com&#x2F;runlater-eu&#x2F;runlocal-server</a>","title":"Show HN: Runlocal \u2013 Open-source localhost tunnel, no signup, no tracking","updated_at":"2026-03-05T23:41:43Z","url":"https://runlocal.eu"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"fidgewidge"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Good, he should rant!<p>&gt; What would framework-integrated fine-grained reactivity look like? Probably something like Solid.js<p>It would look like JavaFX which has had this exact approach since it launched over 10 years ago as well as a large library of observable operators and collections complete with delta events, the ability to define components with a &quot;shadow DOM&quot;, with custom CSS properties, using both JSX-like widget-oriented markup and code, and a whole heap of other things the web community has since slowly rediscovered. Here's the high level observable operators API (there is a lower level one that lets you define custom operators):<p><a href=\"https://openjfx.io/javadoc/19/javafx.base/javafx/beans/binding/Bindings.html\" rel=\"nofollow\">https://openjfx.io/javadoc/19/javafx.base/javafx/beans/bindi...</a><p>And here's the author's Solid.js example in Kotlin with FX:<p><pre><code>  class Counter : Label() {\n    private val count = SimpleIntegerProperty(0)\n    init {\n      textProperty().bind(concat(&quot;Counter: &quot;, count))\n      timer(period = 1000L) { <em>runLater</em> { count.value++ } }\n    }\n  }\n</code></pre>\nYou could also write that in many other languages like Clojure (with cljfx for FP fans), Python, Ruby, JavaScript, and of course Java. It would be less verbose if I used a library that better used Kotlin's features, but the goal here is that you can look up the APIs from the link above (there are a couple of implied static imports).<p>So not much different, but it demonstrates how the text property of the label is bound to a dynamically computed string which is in turn bound to an observable number. When the timer fires, the count increases and the label is recomputed. Everything is done that way so layout computations, for example, won't run unless the size of the label changes. And that's it - no need for VDOMs or prop drilling or state memoization or any of these other performance hacks.<p>At some point you'll observe that this seems a lot like &quot;reactive programming&quot; as used on the server side, and then might want to explore a library like ReactFX which connects these two worlds together.<p><a href=\"https://github.com/TomasMikula/ReactFX\">https://github.com/TomasMikula/ReactFX</a><p>There are some other nice features in this type of toolkit that the web community seems to be heading towards. I'd be willing to bet a lot that at some point they'll even reinvent inheritance under a new name, because being able to write code that's generic over component trees is really pretty useful. The hooks/functions model totally wrecks that and has led to this explosion of &quot;design systems&quot; (otherwise known as themes that bundle half a widget toolkit), none of which interoperate properly or can be coded against in an abstracted manner.<p>None of this is to say that FX is perfect or that React/SolidJS etc are the wrong tools to use. You can run FX apps in a browser using a form of server side rendering - check out <a href=\"https://www.jpro.one\" rel=\"nofollow\">https://www.jpro.one</a> to see a fully crawlable website that's actually implemented using JavaFX on the server with no frontend/backend split existing at all. But it only works well if you don't have a fast and reliable server connection, plus a server with plenty of RAM and CPU. Alas browsers pull all sorts of mean tricks to keep people locked inside the HTML5 sandbox so JS frameworks aren't going anywhere, but it would be nice if that community spread its wings a bit and looked at prior art from outside their language. GUIs are old and the challenges involved in them aren't new, and from the outside it looks suspiciously like there is no real progress being made here, only wheel spinning."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"React is holding me hostage"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://emnudge.dev/blog/react-hostage"}},"_tags":["comment","author_fidgewidge","story_35061672"],"author":"fidgewidge","comment_text":"Good, he should rant!<p>&gt; What would framework-integrated fine-grained reactivity look like? Probably something like Solid.js<p>It would look like JavaFX which has had this exact approach since it launched over 10 years ago as well as a large library of observable operators and collections complete with delta events, the ability to define components with a &quot;shadow DOM&quot;, with custom CSS properties, using both JSX-like widget-oriented markup and code, and a whole heap of other things the web community has since slowly rediscovered. Here&#x27;s the high level observable operators API (there is a lower level one that lets you define custom operators):<p><a href=\"https:&#x2F;&#x2F;openjfx.io&#x2F;javadoc&#x2F;19&#x2F;javafx.base&#x2F;javafx&#x2F;beans&#x2F;binding&#x2F;Bindings.html\" rel=\"nofollow\">https:&#x2F;&#x2F;openjfx.io&#x2F;javadoc&#x2F;19&#x2F;javafx.base&#x2F;javafx&#x2F;beans&#x2F;bindi...</a><p>And here&#x27;s the author&#x27;s Solid.js example in Kotlin with FX:<p><pre><code>  class Counter : Label() {\n    private val count = SimpleIntegerProperty(0)\n    init {\n      textProperty().bind(concat(&quot;Counter: &quot;, count))\n      timer(period = 1000L) { runLater { count.value++ } }\n    }\n  }\n</code></pre>\nYou could also write that in many other languages like Clojure (with cljfx for FP fans), Python, Ruby, JavaScript, and of course Java. It would be less verbose if I used a library that better used Kotlin&#x27;s features, but the goal here is that you can look up the APIs from the link above (there are a couple of implied static imports).<p>So not much different, but it demonstrates how the text property of the label is bound to a dynamically computed string which is in turn bound to an observable number. When the timer fires, the count increases and the label is recomputed. Everything is done that way so layout computations, for example, won&#x27;t run unless the size of the label changes. And that&#x27;s it - no need for VDOMs or prop drilling or state memoization or any of these other performance hacks.<p>At some point you&#x27;ll observe that this seems a lot like &quot;reactive programming&quot; as used on the server side, and then might want to explore a library like ReactFX which connects these two worlds together.<p><a href=\"https:&#x2F;&#x2F;github.com&#x2F;TomasMikula&#x2F;ReactFX\">https:&#x2F;&#x2F;github.com&#x2F;TomasMikula&#x2F;ReactFX</a><p>There are some other nice features in this type of toolkit that the web community seems to be heading towards. I&#x27;d be willing to bet a lot that at some point they&#x27;ll even reinvent inheritance under a new name, because being able to write code that&#x27;s generic over component trees is really pretty useful. The hooks&#x2F;functions model totally wrecks that and has led to this explosion of &quot;design systems&quot; (otherwise known as themes that bundle half a widget toolkit), none of which interoperate properly or can be coded against in an abstracted manner.<p>None of this is to say that FX is perfect or that React&#x2F;SolidJS etc are the wrong tools to use. You can run FX apps in a browser using a form of server side rendering - check out <a href=\"https:&#x2F;&#x2F;www.jpro.one\" rel=\"nofollow\">https:&#x2F;&#x2F;www.jpro.one</a> to see a fully crawlable website that&#x27;s actually implemented using JavaFX on the server with no frontend&#x2F;backend split existing at all. But it only works well if you don&#x27;t have a fast and reliable server connection, plus a server with plenty of RAM and CPU. Alas browsers pull all sorts of mean tricks to keep people locked inside the HTML5 sandbox so JS frameworks aren&#x27;t going anywhere, but it would be nice if that community spread its wings a bit and looked at prior art from outside their language. GUIs are old and the challenges involved in them aren&#x27;t new, and from the outside it looks suspiciously like there is no real progress being made here, only wheel spinning.","created_at":"2023-03-08T09:23:11Z","created_at_i":1678267391,"objectID":"35066915","parent_id":35061672,"story_id":35061672,"story_title":"React is holding me hostage","story_url":"https://emnudge.dev/blog/react-hostage","updated_at":"2024-09-20T13:28:32Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"ysleepy"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Yes, the single threaded design is the way to go. The authors elaborated their position on it and understandably came to the conclusion that multi-threaded updating support will just explode the complexity. But since they obviously thought about this Problem, I don't understand why this issue does not get more attention API wise.<p>There is the javafx.concurrent package, but that just gives you the low-level stuff Tasks/Futures. But what I really want is property binding ( or something more declarative than manually hooking Task-lambdas everywhere ) between the backend threads (which are mandatory since you don't compute in the UI thread) and the UI. You end up duplicating your models because this is really hard otherwise, even though you might only have a viewing App with little logic and could just use the JavaFX Observables as your model properties. Then you have 2 models (MVVM yay) which need to be synchronized, and right now its just loads of Platform.<em>runLater</em> wrapped lambdas everywhere.<p>So the platform kind of forces the MVVM thing, but does not give you much support of doing it in an idiomatic or clean way.<p>I dont really have a good solution for this either, I think DataFX goes there but I have not tried it.<p>But this is all really criticism on a rather high level. I did some cocoa stuff, and my hair fell out. Id rather wrangle JavaFX than cocoa any day."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"JavaFX: Call to ARMs"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://justmy2bits.com/2016/03/12/javafx-call-to-arms/"}},"_tags":["comment","author_ysleepy","story_11737774"],"author":"ysleepy","comment_text":"Yes, the single threaded design is the way to go. The authors elaborated their position on it and understandably came to the conclusion that multi-threaded updating support will just explode the complexity. But since they obviously thought about this Problem, I don&#x27;t understand why this issue does not get more attention API wise.<p>There is the javafx.concurrent package, but that just gives you the low-level stuff Tasks&#x2F;Futures. But what I really want is property binding ( or something more declarative than manually hooking Task-lambdas everywhere ) between the backend threads (which are mandatory since you don&#x27;t compute in the UI thread) and the UI. You end up duplicating your models because this is really hard otherwise, even though you might only have a viewing App with little logic and could just use the JavaFX Observables as your model properties. Then you have 2 models (MVVM yay) which need to be synchronized, and right now its just loads of Platform.runLater wrapped lambdas everywhere.<p>So the platform kind of forces the MVVM thing, but does not give you much support of doing it in an idiomatic or clean way.<p>I dont really have a good solution for this either, I think DataFX goes there but I have not tried it.<p>But this is all really criticism on a rather high level. I did some cocoa stuff, and my hair fell out. Id rather wrangle JavaFX than cocoa any day.","created_at":"2016-05-20T19:46:31Z","created_at_i":1463773591,"objectID":"11740884","parent_id":11739616,"story_id":11737774,"story_title":"JavaFX: Call to ARMs","story_url":"https://justmy2bits.com/2016/03/12/javafx-call-to-arms/","updated_at":"2024-09-19T23:13:48Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"AtBen"},"story_text":{"matchLevel":"none","matchedWords":[],"value":""},"title":{"matchLevel":"none","matchedWords":[],"value":"Schedule your social messages by network"},"url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://<em>runlater</em>.com"}},"_tags":["story","author_AtBen","story_9605409"],"author":"AtBen","created_at":"2015-05-26T15:24:36Z","created_at_i":1432653876,"num_comments":0,"objectID":"9605409","points":1,"story_id":9605409,"story_text":"","title":"Schedule your social messages by network","updated_at":"2023-09-07T02:49:56Z","url":"https://runlater.com"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"recroad"},"story_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"I'm looking for something which I can embed in my site and have customers build beautiful emails. Kind of like the MailChimp email builder but open source.<p>I have tried Puck which is awesome, but is more of a website builder. I've also played around with <em>Unlayer</em>, though it gets quite pricey. Anything else out there?"},"title":{"matchLevel":"none","matchedWords":[],"value":"Ask HN: What is a great open-source visual email builder?"}},"_tags":["story","author_recroad","story_41924691","ask_hn"],"author":"recroad","children":[41927102,41929195],"created_at":"2024-10-23T13:08:02Z","created_at_i":1729688882,"num_comments":3,"objectID":"41924691","points":4,"story_id":41924691,"story_text":"I&#x27;m looking for something which I can embed in my site and have customers build beautiful emails. Kind of like the MailChimp email builder but open source.<p>I have tried Puck which is awesome, but is more of a website builder. I&#x27;ve also played around with Unlayer, though it gets quite pricey. Anything else out there?","title":"Ask HN: What is a great open-source visual email builder?","updated_at":"2024-10-23T22:34:50Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"katbyte"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Simpler program? I usually just end up using Photoshop instead :)<p>When you save a layered file in a <em>unlayer</em>ed format photoshop just forces the \"Save Aa a Copy\" option to be checked and then saves a flattened version while preserving the open one, thus if you then decide to quit without saving a layered version you get a \"Are you sure you wish to quit without saving document x?\"<p>The way Photoshop handles it is far superior imho. With gimp iirc even if the file is not layered you still have to do export?<p>And for many edits, i simply don't want to save layers or history. there's just no point if i'm cropping, converting, re-sizing, or quickly fixing something. If i do then i'll save it as a layered file and layered is by far in the minority. I know what i'm doing i don't need the app to 2nd guess me, and it seems the new workflow is better for people who don't understand the difference between layered and un-layered files."},"story_title":{"matchLevel":"none","matchedWords":[],"value":"Heroku Fucking Console"},"story_url":{"matchLevel":"none","matchedWords":[],"value":"https://github.com/tpope/heroku-fucking-console"}},"_tags":["comment","author_katbyte","story_5304936"],"author":"katbyte","children":[5307153],"comment_text":"Simpler program? I usually just end up using Photoshop instead :)<p>When you save a layered file in a unlayered format photoshop just forces the \"Save Aa a Copy\" option to be checked and then saves a flattened version while preserving the open one, thus if you then decide to quit without saving a layered version you get a \"Are you sure you wish to quit without saving document x?\"<p>The way Photoshop handles it is far superior imho. With gimp iirc even if the file is not layered you still have to do export?<p>And for many edits, i simply don't want to save layers or history. there's just no point if i'm cropping, converting, re-sizing, or quickly fixing something. If i do then i'll save it as a layered file and layered is by far in the minority. I know what i'm doing i don't need the app to 2nd guess me, and it seems the new workflow is better for people who don't understand the difference between layered and un-layered files.","created_at":"2013-03-01T21:26:52Z","created_at_i":1362173212,"objectID":"5307038","parent_id":5306419,"points":null,"story_id":5304936,"story_title":"Heroku Fucking Console","story_url":"https://github.com/tpope/heroku-fucking-console","updated_at":"2023-09-06T20:57:05Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"adeelraza"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"AI needs structured output and that\u2019s exactly what <em>Unlayer</em> Elements provides for emails and documents. And visual builders on top of that."},"story_title":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Launch HN: <em>Unlayer</em> (YC W22) \u2013 Add email and document builders to your app"},"story_url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://<em>unlayer</em>.com"}},"_tags":["comment","author_adeelraza","story_49008901"],"author":"adeelraza","comment_text":"AI needs structured output and that\u2019s exactly what Unlayer Elements provides for emails and documents. And visual builders on top of that.","created_at":"2026-07-23T11:36:37Z","created_at_i":1784806597,"objectID":"49019941","parent_id":49018109,"story_id":49008901,"story_title":"Launch HN: Unlayer (YC W22) \u2013 Add email and document builders to your app","story_url":"https://unlayer.com","updated_at":"2026-07-23T11:38:19Z"},{"_highlightResult":{"author":{"matchLevel":"none","matchedWords":[],"value":"jvwww"},"comment_text":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"To be blunt, I would rate it a 1, a 0 if I could. I would stop reading after the third sentence. FWIW, humanizers do not work. Can they make AI text sound better - yes, but only mildly. Also, they won't trick good ai detectors, and the resulting text is still cumbersome to read.<p>This is what I got first time with a humanizer I built, still sounds terrible:<p>&quot;Yeah, an LLM gets you the 10-minute demo now.<p>The expensive part is everything after, once real users depend on it. You end up maintaining editable state, templates, email-safe HTML, export pipelines, asset handling, permissions, custom blocks, and live previews. That takes months.<p>Structure makes AI output usable here, and it gets more important as the workflow gets automated. That's the idea behind <em>Unlayer</em> Elements. The LLM generates real editable components that map back into the actual email or page, and you keep editing what it makes like anything else in the tool.<p>I'd prototype with the LLM. I'd bring in <em>Unlayer</em> once that content layer becomes real infrastructure you don't want to own yourself.&quot;"},"story_title":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"Launch HN: <em>Unlayer</em> (YC W22) \u2013 Add email and document builders to your app"},"story_url":{"fullyHighlighted":false,"matchLevel":"full","matchedWords":["runlayer"],"value":"https://<em>unlayer</em>.com"}},"_tags":["comment","author_jvwww","story_49008901"],"author":"jvwww","children":[49112082],"comment_text":"To be blunt, I would rate it a 1, a 0 if I could. I would stop reading after the third sentence. FWIW, humanizers do not work. Can they make AI text sound better - yes, but only mildly. Also, they won&#x27;t trick good ai detectors, and the resulting text is still cumbersome to read.<p>This is what I got first time with a humanizer I built, still sounds terrible:<p>&quot;Yeah, an LLM gets you the 10-minute demo now.<p>The expensive part is everything after, once real users depend on it. You end up maintaining editable state, templates, email-safe HTML, export pipelines, asset handling, permissions, custom blocks, and live previews. That takes months.<p>Structure makes AI output usable here, and it gets more important as the workflow gets automated. That&#x27;s the idea behind Unlayer Elements. The LLM generates real editable components that map back into the actual email or page, and you keep editing what it makes like anything else in the tool.<p>I&#x27;d prototype with the LLM. I&#x27;d bring in Unlayer once that content layer becomes real infrastructure you don&#x27;t want to own yourself.&quot;","created_at":"2026-07-23T03:12:36Z","created_at_i":1784776356,"objectID":"49016432","parent_id":49015804,"story_id":49008901,"story_title":"Launch HN: Unlayer (YC W22) \u2013 Add email and document builders to your app","story_url":"https://unlayer.com","updated_at":"2026-07-30T16:14:28Z"}],"hitsPerPage":20,"nbHits":131,"nbPages":7,"page":0,"params":"query=runlayer&advancedSyntax=true&analyticsTags=backend","processingTimeMS":33,"processingTimingsMS":{"_request":{"queue":19,"roundTrip":20},"afterFetch":{"format":{"highlighting":1,"total":1},"merge":{"mergeLoop":{"prepareNextHit":5,"total":5},"total":5},"total":5},"fetch":{"query":22,"scanning":4,"total":27},"total":33},"query":"runlayer","serverTimeMS":55}
