Joe Savona Profile
Joe Savona

@en_JS

12,117
Followers
180
Following
10
Media
2,675
Statuses

React team at Meta

Joined April 2007
Don't wanna be here? Send us removal request.
@en_JS
Joe Savona
4 months
React Compiler is officially open-source! Check out the code: And learn more at
14
163
712
@en_JS
Joe Savona
3 months
Some thoughts on the suspense changes from 19 RC. Most important: our bad. We got this one wrong, and we heard and sincerely appreciate your feedback. We'll hold the 19 release until we find a good fix.
12
69
614
@en_JS
Joe Savona
4 years
As noted in RFC, frameworks such as Rails were one of many inspirations for React Server Components. We’re not swinging the pendulum fully to the server: we’re acknowledging that neither server- or client-rendering are ideal for all cases. Choose *per component* not per app.
@dhh
DHH
4 years
The pendulum is finally swinging back, and with the force of a wrecking ball. May the towers of needless complexity built in the past decade be smashed to smithereens 💥🔨
15
59
481
5
34
266
@en_JS
Joe Savona
1 year
We’ve reached a fun milestone on React Forget: after months building the compiler itself, most of our work is now focused on product integration and experimentation. There’s still a long tail of syntax to support and optimizations that we’ll work on in parallel w experimentation
10
27
231
@en_JS
Joe Savona
7 months
We've made some exciting progress on React Compiler (prev called "Forget") — check out our latest labs post for more!
@reactjs
React
7 months
We’re excited to share that React Compiler is no longer a research project: the compiler now powers instagram web in production and we’re working to ship the compiler across additional surfaces at Meta and prepare the first open source release.
3
76
583
4
24
209
@en_JS
Joe Savona
10 months
An early peak at the level of performance we’re targeting for React Native. We (React team at Meta) have been working closely w Hermes team on this from day one, it’s so exciting to see this coming together.
@tmikov
Tzvetan Mikov
10 months
We wanted to show the performance and the insane power of the Static Hermes native FFI. But we don't yet support the all language features needed to compile React Native (soon though!), so we improvised. We imported the bindings for DearImGui (a popular C++ imperative game UI
68
320
2K
4
15
201
@en_JS
Joe Savona
5 years
I’m excited to share that we’re experimenting w porting Relay Compiler into #rustlang . Our early results are promising: w a bit of structure it’s easy to pick up, and we can move fast and ship high quality, efficient code.
11
37
182
@en_JS
Joe Savona
5 months
React is fundamentally a JavaScript library for UI. But a lot of folks actually want to use *typed* JavaScript with React - so we (React team) partnered with Flow to show what a typed JavaScript for React could look like. I’m really excited to see what ideas this inspires!
@flowtype
Flow
5 months
We added new language features to Flow for writing React. Learn about our new Component Syntax:
18
47
246
5
6
153
@en_JS
Joe Savona
4 months
One of the things I’m most proud of with React Compiler is the design of the HIR. For compiler nerds, it’s a mix of low-level CFG with high-level semantics, allowing us to do precise low-level analysis while producing compact, high-level output.
2
10
142
@en_JS
Joe Savona
2 years
The secret sauce of React is that you work with raw JavaScript values and your code directly defines the control flow of your UI. We take that last bit for granted, but not every library works this way.
1
11
129
@en_JS
Joe Savona
10 months
There’s a recent debate going on about whether it’s better to fetch data at the route level or the component level, with practical benefits cited for either. But people’s preferences are heavily informed by their architectural constraints. There’s no one right answer!
2
16
123
@en_JS
Joe Savona
9 years
"Thinking in GraphQL/Relay" - new #relayjs docs are live!
1
48
111
@en_JS
Joe Savona
8 months
@AdamRackis We have consistently found that using standard JavaScript - if/else, for loops, early returns, mutation of local values, and raw numbers/strings/arrays/etc - is easiest to teach, learn, and use by a wide audience and scale from new devs to senior folks for all kinds of apps.
5
4
91
@en_JS
Joe Savona
11 months
I’m super excited to share more about our vision for React, and how React Forget fits in, at @ReactAdvanced today along w @zmofei . Come find us and chat!
2
12
89
@en_JS
Joe Savona
5 years
At React Conf 2019 we announced an experimental release of React that supports Concurrent Mode and Suspense. Check out our new React blog post for more about the best practices we've identified for using these features:
1
24
87
@en_JS
Joe Savona
1 year
I’ve spoken to so many teams who were frustrated by “limitations of GraphQL” that were actually just limitations of the server or client they had chosen. GraphQL isn’t always the right choice, but check out this list for what a good GraphQL experience should and can be.
@captbaritone
Jordan Eldredge
1 year
I believe the benefits of GraphQL are fundamentally under-realized. Most organizations fail to capture much of the value it can provide. In thought I’d sketch out a "GraphQL maturity model". How mature is your org? Would you appreciate GraphQL more if you were at 13? 🧵/ 15
10
71
482
4
11
84
@en_JS
Joe Savona
7 years
Relay Modern focuses on perf, simplicity, extensibility. Great comparison of Relay Classic/Modern by @stubailo at
0
27
79
@en_JS
Joe Savona
3 months
So: we're working on changes to get feedback from y'all earlier. We're exploring a number of ideas including evolving our previous working groups and RFC process. We will definitely also re-evaluate canary to ensure that more developers can try out changes & new features earlier.
3
2
74
@en_JS
Joe Savona
1 year
A lot of folks have asked about Forget, and we’re excited to share an update in our latest React Labs post!
@reactjs
React
1 year
In React Labs posts, we write about projects in active research and development. Since our last update, we’ve made significant progress on our long-term projects, and we’d like to share what we’ve learned.
15
140
758
4
9
70
@en_JS
Joe Savona
4 years
I’m incredibly excited to share what we’ve been working on: check out our research into React Server Components!
@reactjs
React
4 years
As 2020 comes to an end we wanted to share a special Holiday Update on our research into zero-bundle-size React Server Components. The demo is available now whether you want to play with it during the holiday, or when work picks back up in the new year.
Tweet media one
161
1K
5K
1
5
63
@en_JS
Joe Savona
8 years
Great write up of how to *incrementally* adopt Relay and GraphQL one component at a time:
0
22
59
@en_JS
Joe Savona
4 months
Great thread answering questions about React Compiler. Couldn’t have said it better myself. Thanks Theo!
@t3dotgg
Theo - t3.gg
4 months
Clearing up some React Compiler misunderstandings 1. “React Compiler is written in Rust!” There’s a WIP branch that Joe made to experiment with a Rust implementation. It’s VERY early and AFAIK can’t even be used right now, just meant to show it’s possible
12
87
735
2
3
61
@en_JS
Joe Savona
5 years
I’m pretty excited about the latest Relay features we’re working on. A theme is recapturing some of classic’s expressivity while retaining the performance of modern (and lowering the learning curve!). Thanks to AOT compilation we can have our cake and eat it too: DX and perf.
1
5
59
@en_JS
Joe Savona
3 years
is pretty incredible: a SQLite alternative (even passes all the tests) that is fully reactive. This is a testament to the power of Skip lang - I’m so excited to see where Julien takes this library and the language.
1
8
59
@en_JS
Joe Savona
4 months
Building this has been the project of a lifetime, it's been such an awesome journey with @potetotes @zmofei @_gsathya @someextent with support from so many others at Meta and beyond. Thanks everyone who helped us get to this point!
2
3
60
@en_JS
Joe Savona
9 months
I see this as extra confirmation that RSC is the right overall direction - with parallel convergence on (discovery of) a lot of ideas as Ryan mentioned. We’re super excited to work w Remix folks to tune the RSC APIs so that different frameworks can expose their own takes on RSC.
@ryanflorence
Ryan Florence
9 months
There were no server actions when we created Remix. So we created route actions. Now React has server actions. There was no way to fetch data in components on the server before Remix, so we created route loaders. Now React can fetch data in components for SSR with RSC. React
49
110
1K
1
12
57
@en_JS
Joe Savona
8 months
@lubieowoce @AdamRackis @devagrawal09 Yeah! Much of the React team (myself, @_gsathya , @zmofei , @potetotes etc) are working on React Compiler, which is the foundation of our efforts around client side performance and developer experience. Auto-memoization is just the first part of that story :-)
4
11
52
@en_JS
Joe Savona
4 years
I’m joining the Facebook employee walkout in solidarity with the Black community. Facebookʼs recent decision to not act on posts that incite violence ignores other options to keep our community safe. We implore the Facebook leadership to #TakeAction .
0
2
53
@en_JS
Joe Savona
9 years
The Relay technical preview is open-source: http://t.co/Hczoi4u9uA
4
62
51
@en_JS
Joe Savona
3 months
@NoriSte @adevnadia People are reading too much into this article. The compiler is released as experimental bc it’s genuinely not done yet. Many of the patterns here can be optimized and they are on our list to optimize.
2
5
50
@en_JS
Joe Savona
8 years
Just published an update on Relay: a year in review and roadmap for what's next:
1
24
50
@en_JS
Joe Savona
1 year
Forget needs to handle code with existing memoization. useCallback is easy: just remove the hook call and let Forget memorize the function if necessary (it isn’t always!). UseMemo is more subtle - manually written memoization isn’t optimal!
2
3
50
@en_JS
Joe Savona
8 months
Many people try Rust and after a short while find themselves wanting “Rust, but with GC” (I’m in this picture). If you keep going, you start to see that the ownership model & no GC is fundamental to so much of what makes Rust great. Obligatory reading:
4
4
50
@en_JS
Joe Savona
4 years
“Relay is really a remarkable piece of software, built from the blood, sweat, tears, and most importantly - experience and deep insight - of shipping and maintaining products using GraphQL for a long time.” Great post about the many benefits of Relay.
@___zth___
Gabriel Nordeborn
4 years
A series of posts on Relay! Me and @sgrove have been working hard on a series of posts about Relay, what makes Relay so sweet and why we're both in love with it and think building apps with it is so great. Check it out if you're curious about Relay!
10
67
194
1
9
46
@en_JS
Joe Savona
3 months
@tannerlinsley Render-as-you-fetch and colocation shouldn’t be mutually exclusive. We’ve been advocating for render-as-you-fetch because UX really matters, and we are confident that it’s possible to do it while maintaining a great DX (collocation). Relay and RSC are our takes on this but..
5
2
46
@en_JS
Joe Savona
3 months
Where things went wrong is the next step. We hoped that we'd get feedback via the canary release, which has included this change for many months. But during that time period we've also learned that the canary channel isn't easy enough to consume and few were testing with canary.
2
0
47
@en_JS
Joe Savona
6 years
Relay is working well for us at Facebook and we have a lot of exciting features and usability improvements planned. Learn more in our Q&A on Friday (2/22) from 10-11am PST in
1
10
46
@en_JS
Joe Savona
8 years
Haxl is a truly elegant approach to data-fetching: implicit concurrency to avoid multiple round trips:
1
14
44
@en_JS
Joe Savona
1 year
Huge shout out to @potetotes , @zmofei , and @_gsathya for all their incredible work to get Forget to this point.
2
2
45
@en_JS
Joe Savona
7 years
Read more about the design in the architecture docs, starting here:
2
9
45
@en_JS
Joe Savona
3 months
We also don't want to privilege established players at the expense of making it hard for new libraries/frameworks/educators/voices to emerge. Rushing into a fix could backfire and lead us down the wrong path.
2
0
42
@en_JS
Joe Savona
7 years
Who wants to host a podcast diving into the intervals of Relay Modern and Apollo? So much to learn from contrasting approaches.
@stubailo
Sashko Stubailo 🇺🇦
7 years
@en_JS @ThisIsMissEm @leeb @andrewingram Pro tip: if anyone want to organize this podcast you're going to get a lot of listens
1
0
6
5
6
43
@en_JS
Joe Savona
1 year
Robert was an incredible contributor to Relay - across the compiler, IDE, and runtime, in Rust & JS. I’ve been especially impressed with his thoughtfulness, passion for improving the developer experience and always pushing to make Relay better. We’ll miss you, @StatisticsFTW
@StatisticsFTW
Robert Balicki (👀 @IsographLabs)
1 year
🫡 Today was my last day on the @RelayFramework team. I was included in the Meta layoffs. It's been an immense honor and privilege to be able to work with such talented, driven engineers.
26
15
177
1
4
42
@en_JS
Joe Savona
5 months
@alvarlagerlof We actually presented a preview to the TypeScript team who were incredibly thoughtful about the tradeoffs and challenges involved. It kinda makes sense for Flow to experiment and see what works here, and then other tools can adopt proven ideas.
2
0
41
@en_JS
Joe Savona
7 months
@ReactTraining Note that React 19 is focused on the (awesome) features already in canary. React Compiler is more of the thing that comes next after that, so 19 != Compiler.
1
5
41
@en_JS
Joe Savona
3 months
What happened? The behavior change affected a specific case: a <Suspense> boundary with multiple children that suspend. In 18, React wouldn't stop rendering at the first suspending child. It would continue pre-rendering siblings.
1
0
40
@en_JS
Joe Savona
3 months
The result was that we didn't get the feedback until the 19 RC. Our changelog did call this out (could have called it out more prominently, to be fair), and that's how folks knew to test the behavior. Once we heard the feedback we quickly discussed, leading to where we are.
2
0
40
@en_JS
Joe Savona
3 months
We extensively discussed the tradeoffs of this change. We knew it could regress in a specific scenario: apps with many lazy-fetching children in a single Suspense boundary. We thought this case was uncommon enough (wrong in hindsight). We decided to ship and get feedback.
2
0
40
@en_JS
Joe Savona
6 months
Developers shouldn't need to think about which types need to be memoized or not — so React Compiler includes its own type inference to make memoization more optimal. It was awesome to watch @_gsathya implement this for the compiler!
@_gsathya
Sathya Gunasekaran
6 months
the react compiler's type system was built to improve memoization but it turned out to be useful for lots of other analyses too! 📝 I wrote about how the type system works here:
Tweet media one
10
40
274
0
3
39
@en_JS
Joe Savona
5 years
@swyx Yes: using this as a hiring standard is objectionable because it would disadvantage candidates who don’t have the spare time to do this, and deprive companies of the chance to hire a larger, more diverse pool.
3
0
37
@en_JS
Joe Savona
3 months
Stepping back: there are a few things going on here. We need to continue flushing out our story for client data fetching. But there are many great options in this space that support the render-as-you-fetch pattern: more important is getting feedback from the community earlier.
2
0
39
@en_JS
Joe Savona
3 years
Relay v13 features easier handling of nullable data w at-required, improved query persistence, at-no-inline to reuse artifacts, and many other improvements. It also sets the stage for even more new features going forward as we build atop the new Rust-based compiler.
@RelayFramework
Relay
3 years
Hey all, We've just published the first release candidate of the upcoming Relay v13 to NPM. This is very exciting for us, as it has the new version of the Relay Compiler that we've been working on for a few years now!
1
41
210
3
9
39
@en_JS
Joe Savona
2 months
@ChrisDJackson No. Average person here confirming my unwavering commitment to democracy, not any particular politician. Biden is lost, pass the torch to save the country.
0
0
38
@en_JS
Joe Savona
3 months
When using this pattern, it was inefficient to try to render other siblings of a suspended child, since we would have to show the fallback in either case. So for React 19 we changed to show the fallback right away, then render again once a child un-suspends.
2
0
38
@en_JS
Joe Savona
1 year
For…reasons I am experimenting w various Rust-based JS compilers. I don’t agree w every design decision but overall oxc is really well done.
@_gsathya
Sathya Gunasekaran
1 year
oxc is kinda neat
3
7
42
2
4
38
@en_JS
Joe Savona
3 months
We regularly analyze performance of React apps, and found that this behavior was inefficient in apps that were using the render-as-you-fetch paradigm. In this approach you fetch in eg a route handler, and then suspend if this data isn't ready yet in render.
1
2
37
@en_JS
Joe Savona
4 years
In conclusion: I agree w the aspect of @dhh ’s argument that developers should embrace server rendering *more*. That’s why we’re building React Server Components! But let’s not tear down all the progress we’ve made improving the way we build interactive parts of our apps
0
0
36
@en_JS
Joe Savona
9 years
On the @reactjs blog: "Building The Facebook News Feed With Relay" http://t.co/Wvr28a2T4C
1
23
36
@en_JS
Joe Savona
5 years
@jgcmarins it's live:
1
6
35
@en_JS
Joe Savona
1 year
@bunjavascript Thanks for the support! But it isn’t a competition, there’s space in the ecosystem for lots of libraries making different tradeoffs. Htmx is cool too :-)
1
2
34
@en_JS
Joe Savona
1 year
Babel has been (and will continue to be) such a foundational part of the JS ecosystem but there are definitely limitations which I hope successors learn from. In particular, plugin ordering is a huge challenge and the scope api is simply unreliable.
1
0
35
@en_JS
Joe Savona
3 months
This is harder than it seems (always is) because of the size of our community & many ways people use React. We need to balance info overload while getting a diverse, representative set of feedback.
1
0
35
@en_JS
Joe Savona
4 months
Less than 10 minutes, so excited to share what we’ve been working on!
@reactjs
React
4 months
The React Conf livestream starts in 30min!
5
73
283
0
3
33
@en_JS
Joe Savona
2 years
Early in the development of SkipLang it had an explicit Reactive<T> data type. Natural for a “reactive” language right? Eventually that got discarded, because what does Vec<Reactive<T>> mean? It means indirect control flow. That got removed, and _all_ variables became reactive.
1
1
33
@en_JS
Joe Savona
4 years
@acdlite @sebmarkbage I have no idea how anyone does software development on GitHub. Stacked diffs are table stakes, once you’ve seen the light you can’t go back.
5
0
31
@en_JS
Joe Savona
2 years
@dan_abramov @krall12 @acdlite @LucaColonnello We have a team actively working on Forget, we’re hoping to share another React Labs update soon where we can provide a bit more of an update.
1
2
31
@en_JS
Joe Savona
5 years
The code is at - it’s very early days and this is still experimental. But it’s exciting to share this now so that we can collaborate to make sure this works well for the community.
0
1
31
@en_JS
Joe Savona
4 years
@buildsghost Juniper (for Rust) is, imho, how all GraphQL server libraries should work. Write your business logic, annotate which types/methods are exposed to graphql, generate a schema from that. Solves so many “problems” that stem from schema-first dev.
4
0
31
@en_JS
Joe Savona
7 years
A great write up by @wincent of the story behind Relay Modern. I'm grateful to have been part of this and to work with such an amazing team
@wincent
Greg Hurrell
7 years
A behind-the-scenes take on how we built Relay Modern: — @en_JS : this one's for you. #relayjs #graphql
3
38
128
1
5
32
@en_JS
Joe Savona
9 years
Curious what's next for Relay? Check out our roadmap!
3
25
32
@en_JS
Joe Savona
1 year
I wrote a fun tool as part of Forget this week. When we sync Forget into our internal repo, we want to double check that the new version doesn’t accidentally regress. Ofc we have unit tests, but the compiler is new enough that new issues are possible..
3
1
32
@en_JS
Joe Savona
3 months
@NoriSte @adevnadia The key thing to take away from the article is that *the compiler just worked*. That’s an insanely high bar! Now we can optimize more, from a strong foundation.
1
0
31
@en_JS
Joe Savona
8 years
If you're curious about how Relay works, check out @wincent 's deep-dive into the implementation:
@wincent
Greg Hurrell
8 years
Just published the slides from the Relay Deep Dive: (for context, the video: )
0
12
28
0
7
30
@en_JS
Joe Savona
8 months
@lubieowoce @AdamRackis @devagrawal09 @_gsathya @zmofei @potetotes In terms of bandwidth, the React team is larger than ever and it’s exciting that we’re able to explore multiple areas in parallel, including the next stable release. We’ll share more about our upcoming plans in a post very soon. More about the team in
@sophiebits
sophie alpert
8 months
@matfrana @cassidoo @tannerlinsley @seldo @mjackson @acemarke @kylemathews @DavidKPiano @mattcarrollcode today it's only folks from Meta (~15) and Vercel (~3) that work full-time on React. IMO this is an improvement from only Meta but I would love if we can find a way to bring in new serious contributors who don't work at either one
7
13
122
0
4
31
@en_JS
Joe Savona
3 months
@tannerlinsley We’d love to see more exploration in the ecosystem. For example, component + loader function per file, manually composing the loaders together (parent loader calls child loader). Seems pretty straightforward, decent DX.
4
1
31
@en_JS
Joe Savona
7 months
It’s been sooo long since our last in-person React Conf. I can’t wait to see folks in person to share what we’ve been working on and hear how you’re using React!
@reactjs
React
7 months
We’re thrilled to announce that @zmofei @potetotes @_gsathya and @en_JS will be speaking at React Conf 2024!
Tweet media one
4
20
228
1
0
30
@en_JS
Joe Savona
4 years
@cpojer We use a small, spec-compliant subset of Observables in Relay. The use-case is fundamentally complex, and Observables do help to simplify it (and importantly, provide consistency and robustness re cancellation/errors).
2
1
30
@en_JS
Joe Savona
9 years
This is a great write up of some of the challenges of working with Relay today. Looking forward to solving these!
@andrewingram
Andy Ingram 🌀
9 years
I just published “Facebook’s Relay isn’t for me, yet” #reactjs
3
25
59
0
12
30
@en_JS
Joe Savona
10 months
@zeeg @cpojer @nomadtechie > if you want to fetch less data, just make your API allow that Agree! GraphQL is what happens when you do this systematically.
4
0
30
@en_JS
Joe Savona
8 years
I'm pretty excited about the incremental update path we found for #relayjs - follow along at
1
7
30
@en_JS
Joe Savona
11 months
@mjackson @rickhanlonii @dan_abramov @leeerob @kentcdodds We’ve experimented with RSCs directly and via Next. We’re aware of gaps and room for improvement but haven’t seen what I’d consider major issues. I’m sure y’all are busy but we’d sincerely appreciate if you could file issues w what you’ve observed.
1
0
28
@en_JS
Joe Savona
2 years
Implemented escape analysis for Forget this week so we can avoid memoizing values that don’t flow into the output. Only possible thanks to our sophisticated alias analysis (huge shoutout to @_gsathya for his work there).
1
1
29
@en_JS
Joe Savona
4 years
Having implemented some compilers w language servers it’s now *super* obvious which languages were designed considering IDEs and which weren’t. Some langs have minimal but ambiguous syntax that makes things like autocomplete harder.
3
0
28
@en_JS
Joe Savona
10 years
An introduction to Relay & GraphQL - stay tuned for more! http://t.co/nkT15cY81l
0
15
29
@en_JS
Joe Savona
4 months
@ReedHarmeyer @sebmarkbage @acdlite It took a lot of R&D. Early efforts using abstract interpretation (prepack v1 didn’t work out). The next version of prepack didn’t work at scale. First couple versions of Forget didn’t work in prod. We took all those lessons (plus ideas from Skip, Rust) to create React Compiler.
3
0
28
@en_JS
Joe Savona
2 years
No signals anywhere, straightforward to explain (just a function), great performance. The catch? It uses a compiler. That’s the vision for React.
2
2
28
@en_JS
Joe Savona
9 years
New blog post by @dlschafer and @laneykuenzel with thoughts and plans for realtime updates in GraphQL: http://t.co/cU8PvAxx0V
1
16
27
@en_JS
Joe Savona
5 years
@dhh I’ve mostly seen “magic” used in this way to describe libraries/frameworks that are unpredictable - that are chaotic and/or use heuristics s.t. it’s difficult to guess behavior even if you try to read the source
1
1
26
@en_JS
Joe Savona
2 years
@wongmjane We’ve collaborated w the team at Twitter adopting Relay and GraphQL (all clearly phenomenal, incredibly talented and thoughtful engineers) and for their data model a different pagination scheme made sense.
1
1
27
@en_JS
Joe Savona
4 months
@jamonholmgren @heyImMapleLeaf Exactly - React Compiler provides more fine-grained reactivity than mobx by default, since it’s breaking down components and hooks into individual units. Plus, you get to use standard JS types instead wrapping everything w a proxy-like value.
1
1
27
@en_JS
Joe Savona
7 years
I'm looking forward to @yuzhiz 's talk about Relay Modern today at #f8 - live stream is available, schedule at
3
5
27
@en_JS
Joe Savona
3 months
@sebastienlorber @adevnadia This is a great article! From looking at the examples we've already identified several general-purpose optimizations that we will be implementing — that's why it's still experimental, bc it isn't done yet :-)
1
0
26
@en_JS
Joe Savona
1 year
@jacobmparis @ebns1na @AdamRackis @dan_abramov @potetotes There are more people working on React at Meta than at any time in the project’s history (afaik). Check out the team page for the full list of “core” team members:
1
2
26
@en_JS
Joe Savona
7 years
I'd really like to understand why Promise was standardized without cancellation support. This is a huge oversight, what am I missing?
7
2
26