<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: bruth</title><link>https://news.ycombinator.com/user?id=bruth</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 20 Apr 2026 22:26:41 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=bruth" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by bruth in "TigerBeetle and Synadia pledge $512k to the Zig Software Foundation"]]></title><description><![CDATA[
<p>Unfortunately the LLM is leading you astray :)</p>
]]></description><pubDate>Sat, 25 Oct 2025 19:38:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45706434</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=45706434</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45706434</guid></item><item><title><![CDATA[New comment by bruth in "TigerBeetle and Synadia pledge $512k to the Zig Software Foundation"]]></title><description><![CDATA[
<p>(disclaimer: I am the VP of Prod/Eng at Synadia)<p>NATS - An application connectivity technology (L7). It was originally designed for low-latency M:N messaging, and that is still true today. In 2018, native multi-tenancy, clustering options, etc. got introduced. The persistence subsystem (JetStream) was introduced in 2021. It has a completely different design than Kafka, but with overlapping use cases. For better or worse, we get compared to Kafka a lot and virtually everyone who engages realizes the advantages and opportunities. NATS is much more flexible for application use cases, for example, it provides KeyValue and ObjectStore abstractions on top of the core persistent stream. There are a plethora of other details, but that is the basic gist. Overall, it has a lot of batteries included for building everything from embedded applications to large scale cloud-to-edge systems.<p>Synadia - The founder (Derek) created NATS. We are the primary maintainers of the project. We build products and services on top of NATS including a global SaaS where you can sign up and use "hosted NATS" with additional features. We offer a BYOC model, one of which we manage for you, or a Kubernetes-based self-service one that you deploy yourself. We also support fully self-hosted for customers that need to run in their own data centers or at the edge.<p>Regarding the comment re: the website, there are improvements we have in the works. Happy to engage and help clarify anything that is confusing.</p>
]]></description><pubDate>Sat, 25 Oct 2025 19:35:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45706401</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=45706401</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45706401</guid></item><item><title><![CDATA[New comment by bruth in "Generative AI Is Not Going to Build Your Engineering Team for You"]]></title><description><![CDATA[
<p>I don't know Simon personally, I do know he has been blogging for a very long time and many of his posts are for his own benefit of recall, not necessarily intended for an external audience. Also He did not post this, a different person did.</p>
]]></description><pubDate>Fri, 14 Jun 2024 10:28:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=40679430</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=40679430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40679430</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: Hatchet – Open-source distributed task queue"]]></title><description><![CDATA[
<p>(Disclaimer: I am a NATS maintainer and work for Synadia)<p>The parent comment may have been referring to the fact that NATS has support for durable (and replicated) work queue streams, so those could be used directly for queuing tasks and having a set of workers dequeuing concurrently. And this is regardless if you would want to use Nex or not. Nex is indeed fairly new, but the team on is iterating on it quickly and we are dog-fooding it internally to keep stabilizing it.<p>The other benefits of NATS is the built-in multi-tenancy which would allow for distinct applications/teams/contexts to have an isolated set of streams and messaging. It acts as a secure namespace.<p>NATS supports clustering within a region or across regions. For example, Synadia hosts a supercluster in many different regions across the globe and across the three major cloud providers. As it applies to distributed work queues, you can place work queue streams in a cluster within a region/provider closest to the users/apps enqueuing the work, and then deploy workers in the same region for optimizing latency of dequeuing and processing.<p>Could be worth a deeper look on how much you could leverage for this use case.</p>
]]></description><pubDate>Sat, 09 Mar 2024 11:51:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39651097</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=39651097</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39651097</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>If a learning resource is lacking or confusing, Slack or GitHub issues/discussions is a way to engage and provide feedback so they can be improved. If the docs were confusing, there are other channels to get help to unblock folks. The outcome of that interaction would lead to improvements in the docs.</p>
]]></description><pubDate>Tue, 10 Oct 2023 13:24:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=37831753</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37831753</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37831753</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>> You're in your own little bubble and expect people to be mind readers.<p>Out of curiosity, have you asked questions in Slack or Github? If so, and you had a bad experience with the interaction, I get the sentiment and would offer help. But this comment is not constructive without context.<p>> I'm guessing that the documentation is bad so one has to pay for support.<p>The NATS project has been open source for around 12 years, and part of the CNCF since 2018. This is an incorrect statement and very poor assumption to make because the documentation doesn't make sense for you.<p>I 100% agree it can be improved and we are working on a new docs site, but it is not quite ready.<p>In case its helpful, there is an increasing collection of examples on <a href="https://natsbyexample.com" rel="nofollow noreferrer">https://natsbyexample.com</a> with new JetStream client examples among others. If you have specific requests, feel free to open issues in the corresponding repo: <a href="https://github.com/ConnectEverything/nats-by-example">https://github.com/ConnectEverything/nats-by-example</a></p>
]]></description><pubDate>Mon, 09 Oct 2023 21:21:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=37825670</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37825670</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37825670</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>This post is about a product for NATS.<p>I presume you are talking about the roadmap after the 2.10 release?</p>
]]></description><pubDate>Mon, 09 Oct 2023 19:40:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=37824481</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37824481</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37824481</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>Yes that reads correct. The `sub` would a NATS user public nkey, the `iss` would be the NATS account public nkey (either the issuer nkey in config-mode or existing nkey in decentralized auth).<p>As long as it can verify the chain of trust for the user JWT that is returned, it should work.<p>The three schema types are shown here: <a href="https://docs.nats.io/running-a-nats-service/configuration/securing_nats/auth_callout#schema" rel="nofollow noreferrer">https://docs.nats.io/running-a-nats-service/configuration/se...</a><p>auth request comes in -> generate user jwt, sign + encode -> respond with auth response.<p>As long as the necessary bits of the response and user JWT conform, it will work.</p>
]]></description><pubDate>Mon, 09 Oct 2023 19:38:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=37824464</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37824464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37824464</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>Auth callout is post-NATS client authentication, so it would not solve the "auth web flow" for authentication. Instead, the resulting token from that would be set as a cookie that then would be passed into the nats.ws client connection. The auth callout service would use that token to map to the concrete NATS user. The mechanism of doing that is up to the implementation. One option is to manage NATS claims into the OIDC provider (for the user authenticating) and then the auth service would decode that source JWT and extract the NATS claims and generate the NATS user JWT in the response.</p>
]]></description><pubDate>Mon, 09 Oct 2023 18:48:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=37823803</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37823803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37823803</guid></item><item><title><![CDATA[New comment by bruth in "Stream Compression in NATS"]]></title><description><![CDATA[
<p>> Seems like I need to write a service utilizing NATS which talks to the OIDC server.<p>Auth callout was designed to be a generic extension point to delegate authentication and generate dynamic a user JWT that NATS understands (permissions, limits, etc). It enables an arbitrary backend to be integrated with, not tied specifically to OIDC. But indeed, this requires implementing a service that does this integration.<p>> NATS auth story is a complicated one, and now with auth callout it's even more complicated.<p>There is a spectrum of auth options, starting with simple config-based, token or user/pass leading up to decentralized auth for use cases that need it. Auth callout is an opt-in thing, so it should only be adopted if it is truly necessary.<p>> you have to have dedicated functions which you would call in the request handler 
 [...] instead of being able to define a chain of middleware functions<p>I don't quite understand this statement. Wrapping a NATS handler is the same approach as wrapping an HTTP handler (within the same client app). The function would take a handler and return a handler. There can be inspection of the message within that function and the choice of calling the next handler, responding early, doing some external call, or doing nothing.<p>If you want to distribute this middleware, then you would need to have separate, explicit subjects that each middleware would subscribe to and then publish to for the next element in the chain (for a choreography approach).<p>There is also the "message slip pattern" where the ingest component sets the path as metadata (e.g. headers) that each middleware component uses that to know (at request time) which subject to publish the result to next.</p>
]]></description><pubDate>Mon, 09 Oct 2023 17:52:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=37823165</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=37823165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37823165</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>> If messages were frequent enough, and/or snapshots took a while to compute/transfer, you might never have a roll-up succeed.<p>Yes, good point. The "snapshotting up to a lagging sequence" could be achieved with two separate subjects to reduce contention, but is a bit more work.<p>It sounds like, in Drift's case, the snapshot effectively brings up the tail (snapshot), but the head can still be appended to with new events.</p>
]]></description><pubDate>Mon, 06 Feb 2023 19:30:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=34682859</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34682859</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34682859</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>#1: Correct, I putting together an example this week to show what this looks like. Pretty straightforward.<p>#2: You can combine rollup and expected last sequence header to prevent this, unless I am missing another subtle detail?<p>(I am enjoying this thread FWIW :)</p>
]]></description><pubDate>Mon, 06 Feb 2023 14:59:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=34678212</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34678212</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34678212</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>#1: This isn't a hard requirement to achieve the desired permissions. For the DriftDB use case, my understanding is that all members in the room have full pub/sub k/v permissions, so that could be achieved by declaring a new permission pinned to the room when the room is created or joined (this can be done dynamically without a config file reload).<p>#2 Publishes do support optimistic concurrency control using the `Nats-Last-Expected-Sequence` (stream level) or `Nats-Last-Expected-Subject-Sequence` for the subject-level. This ensures to concurrent publishes will be serialized and all but one is rejected with "conflict wrong sequence" error. For example headers in Rust[0] and WS[1]<p>[0]: <a href="https://docs.rs/async-nats/latest/async_nats/header/index.html" rel="nofollow">https://docs.rs/async-nats/latest/async_nats/header/index.ht...</a></p>
]]></description><pubDate>Mon, 06 Feb 2023 12:07:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=34676211</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34676211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34676211</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>It is a top priority. I do appreciate the constructive criticism and conversation. Feel free to reach out to me (byron at synadia dot com) or on the NATS Slack (<a href="https://slack.nats.io" rel="nofollow">https://slack.nats.io</a>).</p>
]]></description><pubDate>Sat, 04 Feb 2023 23:58:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=34659874</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34659874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34659874</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>> Would appreciate it if you disclosed your affiliation with Synadia and NATS before advertising it.<p>Fair point, but I did not mention Synadia. FWIW, I have been a NATS user for seven+ years prior to joining Synadia so I was speaking on behalf of myself and experience with the tech.<p>Also fair point that the nats.io website does not highlight this strongly. The NATS maintainers are aware (nearly all employed by Synadia) and we are working on it.<p>I disagree that simply because it is not advertised as a "edge" technology that it is not one of the best-in-class techs for edge. It simply means, we are doing a poor job at awareness.<p>> Why don't you start comparing yourself to products and technology that serve the edge<p>The vast majority of people and customers compare NATS to Kafka and the variety of variants out there. Once the push on edge occurs, I suspect comparison to these other tech will occur.<p>To be clear, I am not looking for a "winner" in this discussion, rather my original comment was to correct a gap in understanding of what NATS is capable of.</p>
]]></description><pubDate>Sat, 04 Feb 2023 22:49:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=34659270</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34659270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34659270</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>> Even with NATS jetstream, NATS has a focus on service communication.<p>It indeed excels at service communication as well. However, a core use case for NATS is the edge, be it your definition (browsers and mobile), but also in cars, factories, tractors, low-orbit satellites, etc, whether it is running on Kubernetes, k3s, or bare metal.<p>The issue you called out is a Firefox-specific issue, but it will be addressed and not indicative of an inherit limitation of NATS.<p>Check out this playlist of a live event I organized last fall with a variety of live demos: <a href="https://youtube.com/playlist?list=PLgqCaaYodvKY6xRbvB6ffON0_ahyhDsoM">https://youtube.com/playlist?list=PLgqCaaYodvKY6xRbvB6ffON0_...</a></p>
]]></description><pubDate>Sat, 04 Feb 2023 21:27:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=34658488</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34658488</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34658488</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>Was not aware of Plane, nice! Regarding the two points:<p>- A unique room ID/subject is a form of authentication. Essentially anyone having that unique identifier can join, akin to a token. This is straightforward to setup in NATS avoiding the ">" for all problem (which I may now need to write a blog post about ;-)<p>- Rollups are supported on a per-subject basis. Each room could be modeled as a subject and individually rolled up.</p>
]]></description><pubDate>Sat, 04 Feb 2023 18:42:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=34656863</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34656863</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34656863</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>In fact it does all of these things now properly! STAN (NATS Streaming) was deprecated two years ago in favor of a new embedded subsystem called JetStream: <a href="https://docs.nats.io/nats-concepts/jetstream" rel="nofollow">https://docs.nats.io/nats-concepts/jetstream</a> released in March 2021.</p>
]]></description><pubDate>Sat, 04 Feb 2023 11:40:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=34653676</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34653676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34653676</guid></item><item><title><![CDATA[New comment by bruth in "Show HN: DriftDB – an open source WebSocket backend for real-time apps"]]></title><description><![CDATA[
<p>Nice, have you come across NATS? <a href="https://nats.io" rel="nofollow">https://nats.io</a>. The server natively supports WebSockets. There are many clients including Deno, Node, WebSockets, Rust, Go, C, Python, etc.<p>In addition to stateless messaging, it supports durable streams, and optimized API layers on top like key-value, and object storage.<p>The server also natively supports MQTT 3.1.1.</p>
]]></description><pubDate>Sat, 04 Feb 2023 02:09:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=34650640</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=34650640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34650640</guid></item><item><title><![CDATA[New comment by bruth in "Which language to choose? Wanna develop an IoT solution"]]></title><description><![CDATA[
<p>Check out SimpleIoT: <a href="https://github.com/simpleiot/simpleiot" rel="nofollow">https://github.com/simpleiot/simpleiot</a></p>
]]></description><pubDate>Sat, 08 Oct 2022 14:43:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=33132694</link><dc:creator>bruth</dc:creator><comments>https://news.ycombinator.com/item?id=33132694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33132694</guid></item></channel></rss>