Sign in

Robert Balicki

@statisticsftw.bsky.social
820 followers 465 following 619 posts

Creator of Isograph github.com/isographlabs/isograph. Check out my talk at GraphQL conf! youtu.be/sf8ac2NtwPY?si=jkljEacLsxS… Pinterest, previously Relay team at Meta

PostsRepliesMedia
Robert Balicki @statisticsftw.bsky.social · 14/12/2025
And not only does this work in VSCode, thanks to github.com/sp6370, we're also publishing the extension to the Open VSX registry! So you can use it in other editors! Thanks!!
110
Robert Balicki @statisticsftw.bsky.social · 14/12/2025
And most importantly... if you select a field that doesn't exist, the extension will offer to create it for you! Wow!! Isograph is truly committed to helping you ship fast :)
110
Robert Balicki @statisticsftw.bsky.social · 14/12/2025
We now have autocomplete of fields!
110
Robert Balicki @statisticsftw.bsky.social · 14/12/2025
Errors are now surfaced in VSCode!
110
Robert Balicki @statisticsftw.bsky.social · 14/12/2025
Hey folks! Isograph v0.5.0 has just been released!! The trend of groundbreaking releases continues 🎉 This release includes support for optimistic updates and for writing external data into Isograph. And it has massive DevEx wins 🤩 and huge perf wins. Let's dive in!
140
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
That's enough for now, but expect more threads in which I do a deep dive on all of the other awesome features that we shipped in v0.4!
010
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
So go for it! Give Isograph a try! Star the repo! Join the discord! isograph.dev/discord
100
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
It's just another way in which Isograph allows you to improve performance (fetch less data) while improving developer experience (and velocity!) Thank you Patryk Wałach for putting in an absolutely heroic amount of work on pointers over the course of a year 🤩
110
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
They're defined extremely similarly to client fields! Except instead of returning an arbitrary value, you return a link to another GraphQL object.
100
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
This release introduces client pointers, which were the biggest missing primitive in Isograph! Client pointers are like client fields that return a link to another object, and off of which you can select additional fields. Here, we select fields off of the dirtiestDodger pointer
100
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
Next — a new primitive! Isograph apps are composed of client fields, which are functions from graph data to an arbitrary value. You can't select anything off of client fields, i.e. they are "leaves." SuspectsCard and DirtiestDodgerCard are client fields in this example.
100
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
First up: the VSCode extension. Without the VSCode extension, working with Isograph literals feels like manipulating magic strings. But with syntax highlighting, go to definition, and hover info — the VSCode makes it easy to form a mental model of the structure of your app.
110
Robert Balicki @statisticsftw.bsky.social · 20/09/2025
sograph 0.4 has been released!! Importantly, this includes the official release of the VSCode extension! It includes new primitives! And it includes so much more! Let's talk about the VSCode extension and client pointers, and save the rest for another thread 😎
100
Robert Balicki @statisticsftw.bsky.social · 29/07/2025
e.g. in this example, we don't pass any data to `Pet.PetCheckinsCard`! It just knows that it refers to the pet with id $id. We also don't import PetCheckinsCard ourselves! Sounds trivial, but it means that the compiler can do a lot more. Consider this
100
Robert Balicki @statisticsftw.bsky.social · 29/07/2025
Hey @jason.energy! Nice to meet you. Isograph is a framework for building data driven apps. For now, GraphQL, later, everything. I'd love to share more about it! (Ideally later in the summer, when the language server ships.) Example here:
100
Robert Balicki @statisticsftw.bsky.social · 18/03/2025
#RustNYC has another upcoming meetup on 3/26: I can't believe that's legal Rust! with @mgattozzi.dev I'm pumped about this meetup. If you loved his RustConf talk "WEIRD EXPRESSIONS AND WHERE TO FIND THEM" (caps in original), then you're going to love this talk.
162
Robert Balicki @statisticsftw.bsky.social · 07/03/2025
Content Foundry made it to the HN front page!!!
030
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
github.com/lanesawyer added a demo of using Isograph with Vite, and improved our internal tooling massively 😅😅🤩
110
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
Thanks once again to Patryk, we lifted the requirements that IDs are globally unique! Now, they only have to be unique within a given typename. This was, for many years, a blocker to the adoption of other frameworks. Don't let it stop you from adopting Isograph!
110
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
`onComplete` and `onError` callbacks. Now, when you make a network request with `useLazyReference` or `useImperativeReference`, you can be notified if the network request completed or errored out.
110
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
We added support for refining from interface/union types to concrete types, using `asConcreteType` fields that are added by the compiler. The value of these fields will be null if the abstract type doesn't match the concrete type!
110
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
Fetch policies — we've added fetch policies. Now, when you make a network request using `useLazyReference` or `useImperativeReference`, you can specify that the network request should always go out, never go out, or go out only if there is missing data in the local store.
110
Robert Balicki @statisticsftw.bsky.social · 03/03/2025
We're *extremely* excited to announce the release of Isograph 0.3.0 and 0.3.1! These releases are chock-full of new features, and make Isograph much more usable in real-world projects. Let's dive in! isograph.dev/blog/2025/03...
152
Robert Balicki @statisticsftw.bsky.social · 31/01/2025
Once again, I am minorly annoyed that TypeScript doesn't properly handle single-variant enums aka it should understand that _ is actually never in this situation cc @ballingt.com
100
Robert Balicki @statisticsftw.bsky.social · 29/01/2025
I have a type, IsExactlyEqual. It doesn't quite work exactly, as demonstrated by the second picture. Is there any way to make this behave as expected? @typescriptlang.org Halp
200
Robert Balicki @statisticsftw.bsky.social · 03/01/2025
#rust Whelp, that's a bummer. I implement Display for an EmbeddedLocation struct. This is a wrapper around a path to a file and span within that file. Displaying that will print out something like what's pictured - In order to print this, we need to read the file - So, we need the absolute path
200
Robert Balicki @statisticsftw.bsky.social · 28/12/2024
I created a starter pack that includes a bunch of folks who are in the GraphQL community! If I missed anyone, please let me know and I'll add them! And feel free to share this widely! go.bsky.app/P8JViJA This platform has astonishingly little reasoned discussion of GraphQL, and that should change!
5237
Robert Balicki @statisticsftw.bsky.social · 17/12/2024
google results in thailand
010
Robert Balicki @statisticsftw.bsky.social · 03/12/2024
every error is a type error
000
Robert Balicki @statisticsftw.bsky.social · 03/12/2024
😭
020
Robert Balicki @statisticsftw.bsky.social · 03/12/2024
What I really want is an assertion that a manually maintained object, when passed through a type transformation (ToDiscriminatedUnion) will behave as expected. In this case it does, but I don't know whether there is a good way to ensure that this doesn't break down as other engineers add entries
100
Robert Balicki @statisticsftw.bsky.social · 26/11/2024
Web dev challenge- make this (hint: this involves changing accessibility settings (probably) and the developers (probably) never testing with them on)
120
Robert Balicki @statisticsftw.bsky.social · 21/11/2024
Amazing name
020
Robert Balicki @statisticsftw.bsky.social · 21/11/2024
This article goes into how the authors came up with an estimate, which I think is really cool. I haven't seen this outside of science reporting. www.nytimes.com/2024/11/19/h...
000
Robert Balicki @statisticsftw.bsky.social · 20/11/2024
in case y'all want to start a browser project with an epic name
020
Robert Balicki @statisticsftw.bsky.social · 19/11/2024
oh no
300
Robert Balicki @statisticsftw.bsky.social · 19/11/2024
no uglier comma
030
Robert Balicki @statisticsftw.bsky.social · 19/11/2024
that's a first
020
Robert Balicki @statisticsftw.bsky.social · 18/11/2024
you too can disable that Google lens overlay in the omnibar that just started showing up
000
Robert Balicki @statisticsftw.bsky.social · 14/11/2024
I'm good at design why do you ask
000
Robert Balicki @statisticsftw.bsky.social · 13/11/2024
Thankfully @crmarsh.com explained NP-hard for us dummies: "you can think of it as very very hard". #RustNYC Rust NYC
040
Robert Balicki @statisticsftw.bsky.social · 13/11/2024
Holy cow! 10% of requests to the Python registry come from uv. With @crmarsh.com at #RustNYC Rust NYC
051
Robert Balicki @statisticsftw.bsky.social · 05/11/2024
Hey look! It's 3D (i.e. only loading the JavaScript for components you actually end up using) in Isograph! And it's super easy, and done in userland!! Don't *you* want to load only the JavaScript your app ends up using? Don't *you* want to cut down on bloat?
031
Robert Balicki @statisticsftw.bsky.social · 04/11/2024
It's really easy to load just the data and JavaScript you need in Isograph! If you're familiar with Relay entrypoints, it's 1000x simpler here.
000
Robert Balicki @statisticsftw.bsky.social · 03/11/2024
The actual implementation is quite interesting. Every field has an optional condition. By default, if you have no condition, we will use the value that is in the store (e.g. in the `asUser` field). But a condition function can do several things:
100
Robert Balicki @statisticsftw.bsky.social · 03/11/2024
Remember how I said that inline fragments were just linked fields? Well...
Example usage of an asUser field, which plays the role of an inline fragment
100
Robert Balicki @statisticsftw.bsky.social · 02/11/2024
you wouldn't know this from looking at it, but this is the first sign of a huge feature that's about to drop in Isograph
000
Robert Balicki @statisticsftw.bsky.social · 01/11/2024
that's really cool googleprojectzero.blogspot.com/2024/10/from...
110