<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: jschorr</title><link>https://news.ycombinator.com/user?id=jschorr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 13 Jun 2026 13:12:22 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jschorr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Grafana Labs internal source code accessed]]></title><description><![CDATA[
<p>Article URL: <a href="https://twitter.com/grafana/status/2055827123236171827">https://twitter.com/grafana/status/2055827123236171827</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48165902">https://news.ycombinator.com/item?id=48165902</a></p>
<p>Points: 85</p>
<p># Comments: 26</p>
]]></description><pubDate>Sun, 17 May 2026 03:48:15 +0000</pubDate><link>https://twitter.com/grafana/status/2055827123236171827</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=48165902</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48165902</guid></item><item><title><![CDATA[New comment by jschorr in "Permission Systems for Enterprise That Scale"]]></title><description><![CDATA[
<p>Sweet! I'd love to see it, if you have a link, or throw it in our Discord [1]!<p>[1]: <a href="https://discord.com/invite/GBeT3R4k84" rel="nofollow">https://discord.com/invite/GBeT3R4k84</a></p>
]]></description><pubDate>Sat, 27 Dec 2025 17:18:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46403314</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46403314</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46403314</guid></item><item><title><![CDATA[New comment by jschorr in "Permission Systems for Enterprise That Scale"]]></title><description><![CDATA[
<p>Google's Zanzibar actually does <i>both</i>: for the vast majority of queries, it uses significant levels of caching and a permitted amount of staleness [1], allowing Spanner to return a (somewhat stale) copy of the relationship data from local nodes, rather than having to wait or coordinate with the other nodes.<p>However, some deeply recursive or wide relations can still be slow, so Zanzibar also has a pre-computation cache called Leopard that is used for a very specific subset of these relations [2]. For SpiceDB, we called our version of this cache Materialize and it is designed expressly for handling "Enterprise" levels of scale in a similar fashion, as sometimes it is simply too slow to walk these deep graphs in real-time.<p>[1]: <a href="https://zanzibar.tech/24uQOiQnVi:1T:4S" rel="nofollow">https://zanzibar.tech/24uQOiQnVi:1T:4S</a>
[2]: <a href="https://zanzibar.tech/21tieegnDR:0.H1AowI3SG:2O" rel="nofollow">https://zanzibar.tech/21tieegnDR:0.H1AowI3SG:2O</a></p>
]]></description><pubDate>Wed, 24 Dec 2025 18:32:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46377979</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46377979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46377979</guid></item><item><title><![CDATA[New comment by jschorr in "Permission Systems for Enterprise That Scale"]]></title><description><![CDATA[
<p>We actually have users that synchronize their resources from various sources (AWS, Kubernetes, etc) into SpiceDB, explicitly so they can perform these kinds of queries!<p>One of the major benefits of a centralized authorization system is allowing for permissions queries across resources and subjects from multiple different services/sources (of course, with the need to synchronize the data in)<p>Happy to expand on how some users do so, if you're curious.</p>
]]></description><pubDate>Wed, 24 Dec 2025 18:02:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46377728</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46377728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46377728</guid></item><item><title><![CDATA[New comment by jschorr in "Permission Systems for Enterprise That Scale"]]></title><description><![CDATA[
<p>In SpiceDB, this is known as the LookupResources [1] API, which returns all resources (of a particular type) that a particular subject (user in this case) has a particular permission on.<p>We have a guide on doing ACL-aware filtering and listing [2] with this API and describing other approaches for larger Enterprise scales<p>Disclaimer: I'm the co-founder and CTO of AuthZed, we develop SpiceDB, and I wrote  our most recent implementation of LookupResources<p>[1]: <a href="https://buf.build/authzed/api/docs/main:authzed.api.v1#authzed.api.v1.PermissionsService.LookupResources" rel="nofollow">https://buf.build/authzed/api/docs/main:authzed.api.v1#authz...</a>
[2]: <a href="https://authzed.com/docs/spicedb/modeling/protecting-a-list-endpoint">https://authzed.com/docs/spicedb/modeling/protecting-a-list-...</a></p>
]]></description><pubDate>Wed, 24 Dec 2025 17:59:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46377695</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46377695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46377695</guid></item><item><title><![CDATA[New comment by jschorr in "Microservices should form a polytree"]]></title><description><![CDATA[
<p>Dealing with lists is complicated with ReBAC, but possible. See my other comment on this: <a href="https://news.ycombinator.com/item?id=45662850">https://news.ycombinator.com/item?id=45662850</a></p>
]]></description><pubDate>Mon, 15 Dec 2025 04:00:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46270322</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46270322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46270322</guid></item><item><title><![CDATA[New comment by jschorr in "I built a faster Notion in Rust"]]></title><description><![CDATA[
<p>I'd start with reading the Zanzibar Paper. We built an annotated version [1] that provides additional guidance on some of the denser sections and how we interpreted them.<p>Then, I'd take a look at the history of SpiceDB [2] for how we developed the system over time.<p>Finally, if you have any questions, feel free to jump into our Discord [3] and ask: we're happy to answer!<p>[1]: <a href="https://zanzibar.tech/" rel="nofollow">https://zanzibar.tech/</a>
[2]: <a href="https://spicedb.io" rel="nofollow">https://spicedb.io</a>
[3]: <a href="https://discord.gg/spicedb" rel="nofollow">https://discord.gg/spicedb</a></p>
]]></description><pubDate>Tue, 25 Nov 2025 16:02:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46047114</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46047114</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46047114</guid></item><item><title><![CDATA[New comment by jschorr in "I built a faster Notion in Rust"]]></title><description><![CDATA[
<p>It is actually slightly worse than even that: while New Enemy [1] is the primary concern, caching like this can also introduce a staleness issue from the other direction: let's say a user adds a new row or document, and immediately sends the link to their coworker... who tries to load that piece of data, but the (stale) access control dataset is cached and they are not in it... they get a "no access" error. While certainly fail safe (vs fail dangerous for New Enemy), it can be a fairly important UX concern as well.<p>Generally, the solution is to keep a timestamp of when the data changed (Zookies as you mentioned) <i>or</i> you can proactively reload or recompute the cache when the underlying data changes (sometimes in very smart ways), but yeah: it adds significant complications over a "simplified" approach to Zanzibar.<p>Disclaimer: I'm the cofounder and CTO of AuthZed and we develop the SpiceDB [2] and Materialize [3], which have quite a bit of logic around these exact problems<p>[1]: <a href="https://authzed.com/blog/new-enemies#the-new-enemy-problem">https://authzed.com/blog/new-enemies#the-new-enemy-problem</a>
[2]: <a href="https://spicedb.io" rel="nofollow">https://spicedb.io</a>
[3]: <a href="https://authzed.com/docs/authzed/concepts/authzed-materialize">https://authzed.com/docs/authzed/concepts/authzed-materializ...</a></p>
]]></description><pubDate>Mon, 24 Nov 2025 23:55:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46040837</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=46040837</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46040837</guid></item><item><title><![CDATA[New comment by jschorr in "We rewrote OpenFGA in pure Postgres"]]></title><description><![CDATA[
<p>Happy to answer any other questions :D</p>
]]></description><pubDate>Wed, 22 Oct 2025 01:13:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=45663856</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=45663856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45663856</guid></item><item><title><![CDATA[New comment by jschorr in "We rewrote OpenFGA in pure Postgres"]]></title><description><![CDATA[
<p>>  I remember building a project where we kept a mapping table of users to permissions for quick lookups, but man, it got messy with data updates.<p>Yep, as I mentioned above, its not an easy problem but once it is solved for you, it becomes "just" watching the events and performing the JOINs.<p>> especially if we could create an extension for other databases<p>See my video I linked above about the Postgres FDW: It does exactly this for SpiceDB and works seamlessly as-if there is a denormalized permissions table sitting in your Postgres, while still supporting the full array of complex authorization rules found in ReBAC.</p>
]]></description><pubDate>Wed, 22 Oct 2025 00:23:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=45663540</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=45663540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45663540</guid></item><item><title><![CDATA[New comment by jschorr in "We rewrote OpenFGA in pure Postgres"]]></title><description><![CDATA[
<p>Reconciling externalized authz with search is actually quite a challenging problem. For standard externalized authz, the recommendation is some form of pre-filtering or post-filtering [1], for which we actually built LookupResources (pre-filtering) and CheckBulkPermission (post-filtering) into SpiceDB.<p>However, as you mentioned, life is easier when the main database can handle everything, so we actually built a solution in that space called Materialize [2], which heavily denormalizes the authorization data and allows for joining within application databases such as Postgres. My colleague Evan actually put together a really cool video about using it with Gitea [3].<p>Recognizing that even with Materialize, however, the need to consume events can be a bit annoying, I've been doing some work to allow Postgres itself to do <i>native</i> JOINs against SpiceDB (and other operations). I demo it briefly in our recent announcements video [4] and I think it effectively solves this problem within Postgres, while still allowing for all the benefits (scale, performance, redundancy, distribution) of externalized authz.<p>[1]: <a href="https://authzed.com/docs/spicedb/modeling/protecting-a-list-endpoint">https://authzed.com/docs/spicedb/modeling/protecting-a-list-...</a><p>[2]: <a href="https://authzed.com/products/authzed-materialize">https://authzed.com/products/authzed-materialize</a><p>[3]: <a href="https://www.youtube.com/live/u3i1SEd9Ll8?si=mCz5mZterxthoEwj" rel="nofollow">https://www.youtube.com/live/u3i1SEd9Ll8?si=mCz5mZterxthoEwj</a><p>[4]: <a href="https://www.youtube.com/live/uz_gxz3whS0?si=g4NUZAIltYVyFzYj&t=3499" rel="nofollow">https://www.youtube.com/live/uz_gxz3whS0?si=g4NUZAIltYVyFzYj...</a><p>Disclaimer: I'm cofounder and CTO at AuthZed and we build SpiceDB and Materialize</p>
]]></description><pubDate>Tue, 21 Oct 2025 23:01:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45662850</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=45662850</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45662850</guid></item><item><title><![CDATA[New comment by jschorr in "Docker Hub Is Down"]]></title><description><![CDATA[
<p>We actually originally pronounced it as "kway" (the American pronunciation we had heard) but then had a saying we'd tell customers (when asked) of "pronounce it however you please, so long as you're happy using it!" :)<p>Source: I co-founded Quay.io</p>
]]></description><pubDate>Thu, 25 Sep 2025 04:53:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45369383</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=45369383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45369383</guid></item><item><title><![CDATA[New comment by jschorr in "The Day Benjamin Franklin Broke Our CI"]]></title><description><![CDATA[
<p>An amusing story of how I spent my Monday afternoon debugging a failure in our CI that mysteriously appeared over the weekend</p>
]]></description><pubDate>Fri, 08 Nov 2024 16:26:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=42088069</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=42088069</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42088069</guid></item><item><title><![CDATA[The Day Benjamin Franklin Broke Our CI]]></title><description><![CDATA[
<p>Article URL: <a href="https://authzed.com/blog/the-day-benjamin-franklin-broke-our-ci">https://authzed.com/blog/the-day-benjamin-franklin-broke-our-ci</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42087709">https://news.ycombinator.com/item?id=42087709</a></p>
<p>Points: 6</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 08 Nov 2024 15:48:21 +0000</pubDate><link>https://authzed.com/blog/the-day-benjamin-franklin-broke-our-ci</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=42087709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42087709</guid></item><item><title><![CDATA[AMA on X with Boom CEO Blake Scholl]]></title><description><![CDATA[
<p>Article URL: <a href="https://twitter.com/bscholl/status/1817609172860780562">https://twitter.com/bscholl/status/1817609172860780562</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41095167">https://news.ycombinator.com/item?id=41095167</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 28 Jul 2024 18:59:00 +0000</pubDate><link>https://twitter.com/bscholl/status/1817609172860780562</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=41095167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41095167</guid></item><item><title><![CDATA[New comment by jschorr in "Open sourcing the SpiceDB Playground: model authz in-browser, powered by WASM"]]></title><description><![CDATA[
<p>Hi HN, I'm happy to announce the open sourcing of the SpiceDB Playground [1], our in-browser playground for developing and testing authorization systems for SpiceDB, our open source implementation of Google Zanzibar.<p>In a previous HN post [2], we discussed how we moved the playground to use WASM for running SpiceDB, massively improving performance. Today, we're happy to open source the frontend side of the playground, so that everyone can see how it works and make improvements!<p>[1]: <a href="https://github.com/authzed/playground">https://github.com/authzed/playground</a>
[2]: <a href="https://news.ycombinator.com/item?id=32595310">https://news.ycombinator.com/item?id=32595310</a></p>
]]></description><pubDate>Mon, 01 Apr 2024 16:33:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=39895975</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=39895975</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39895975</guid></item><item><title><![CDATA[Open sourcing the SpiceDB Playground: model authz in-browser, powered by WASM]]></title><description><![CDATA[
<p>Article URL: <a href="https://authzed.com/blog/spicedb-playground-is-open-source">https://authzed.com/blog/spicedb-playground-is-open-source</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=39895974">https://news.ycombinator.com/item?id=39895974</a></p>
<p>Points: 5</p>
<p># Comments: 2</p>
]]></description><pubDate>Mon, 01 Apr 2024 16:33:00 +0000</pubDate><link>https://authzed.com/blog/spicedb-playground-is-open-source</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=39895974</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39895974</guid></item><item><title><![CDATA[New comment by jschorr in "Pains of building your own billing system"]]></title><description><![CDATA[
<p>Definitely! We ourselves, in fact, use SpiceDB for our own dynamic feature flags internally.</p>
]]></description><pubDate>Mon, 26 Feb 2024 23:56:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=39518362</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=39518362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39518362</guid></item><item><title><![CDATA[New comment by jschorr in "Pains of building your own billing system"]]></title><description><![CDATA[
<p>"Can I [action]?" is the exact question that Zanzibar[0] was designed to answer in a highly performant and scalable way.<p>With multiple data sources reading and writing to SpiceDB [1] (our OSS implementation of Zanzibar), those questions can further be extended into "Can [subject] [action] on [resource]", which allows for supporting not just permissions, but (as you suggested) feature flags, entitlements, role-based access control and even billing-based entitlements (if the billing system's information is supplied in as relationships or dynamically via caveat context [2]).<p>As a concrete example, feature flags can be represented as a straightforward permission:<p><pre><code>  definition user {}
  
  definition featureflag {
    relation enabled: user
    permission is_enabled = enabled
  }
</code></pre>
They can then be checked directly:<p><pre><code>  check featureflag:somefeature is_enabled user:{currentuserid}

</code></pre>
The real power comes into play when different aspects of the system are combined, such as only allowing a feature flag to be enabled if, say, the user also has another permission:<p><pre><code>  definition organization {
    relation member: user
  }
 
  definition featureflag {
    relation enabled: user
    relation org: organization
    permission is_enabled = enabled & org->member
  }
</code></pre>
In the above example [3], a feature flag is only enabled for the specific user if they were granted the flag <i>and</i> they are a member of the organization for which the flag was created. While this is somewhat of a constructed example, it demonstrates how combining the models can be used to grant more capabilities.<p>With caveats [2], these kinds of questions can even depend on <i>dynamic</i> data, such as the time of day, whether the user's account balance is positive, or even be random based on some distribution (to enabled, for example, partial enablement of feature flags)<p>[0]: <a href="https://zanzibar.tech/" rel="nofollow">https://zanzibar.tech/</a>
[1]: <a href="https://spicedb.io" rel="nofollow">https://spicedb.io</a>
[2]: <a href="https://authzed.com/docs/spicedb/concepts/caveats">https://authzed.com/docs/spicedb/concepts/caveats</a>
[3]: <a href="https://play.authzed.com/s/eML6cLz9ByAZ/schema">https://play.authzed.com/s/eML6cLz9ByAZ/schema</a><p>Disclaimer: I'm CTO and a cofounder at AuthZed, and we build SpiceDB</p>
]]></description><pubDate>Mon, 26 Feb 2024 18:03:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39514664</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=39514664</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39514664</guid></item><item><title><![CDATA[New comment by jschorr in "AWS Creates New Policy-Based Access Control Language Cedar"]]></title><description><![CDATA[
<p>Indeed it is! :)</p>
]]></description><pubDate>Mon, 20 Feb 2023 16:30:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=34869690</link><dc:creator>jschorr</dc:creator><comments>https://news.ycombinator.com/item?id=34869690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34869690</guid></item></channel></rss>