Sign in

Joe Savona

@en-js.bsky.social
1.3K followers 62 following 173 posts

Dad, ultimate frisbee player/coach, runner, chess puzzler. Former React core & Compiler. 日本語もOK

PostsRepliesMedia
Joe Savona @en-js.bsky.social · 22/06/2026
This is a really elegant way to describe the rules and build intuition. This is mostly second nature to me at this point, but the rules are clear and definitely help w some edge cases in particular. I don’t get why people are making such a fuss.
020
Joe Savona @en-js.bsky.social · 07/06/2026
Over the years many colleagues who were considering a change sought out my advice. It was always the same: life is short and if you’re asking me it means your heart already decided, so go try something new and enjoy. This time I took my own advice ✌️
0210
Joe Savona @en-js.bsky.social · 07/06/2026
I no longer work on React! A few months back an opportunity came up to join a different team that I was excited about: I had been working around, then on, React for a combined 11+ years and was ready for a change, so I took the chance.
5541
Joe Savona @en-js.bsky.social · 18/04/2026
Yeah I’d agree with that. LLMs absolutely democratize building proof of concepts and internal tools. But in my experience building really high quality software still requires very close supervision from experienced developers, even on frontier models at the highest thinking levels.
2151
Joe Savona @en-js.bsky.social · 18/04/2026
Yeah, you absolutely can produce very high quality software with LLMs. I don’t think you save that much time on new, interesting features, bc producing something great was never primarily blocked by typing speed. But a great eng/team can absolutely make something great.
1100
Joe Savona @en-js.bsky.social · 14/04/2026
It’s called code and a compiler ;-)
000
Joe Savona @en-js.bsky.social · 13/04/2026
Wanted: a detailed specification format to ensure that AI doesn’t drift. Preferably with tooling that automatically checks if there are other areas of the codebase I need to consider as I work on the spec. Maybe realtime highlighting of any obvious mistakes I’m making in the spec document ;-)
140
Joe Savona @en-js.bsky.social · 31/03/2026
Combine that w manually spot checking some code and automated review and we’re good.
000
Joe Savona @en-js.bsky.social · 31/03/2026
The strategy is that this is reviewable and we’ll land it. We don’t need thorough human review of every line of code: instead we are focusing on verifying the test setup. If it’s tested properly (every single compiler pass produces identical intermediate state), that gives us a ton of confidence..
210
Joe Savona @en-js.bsky.social · 31/03/2026
That first port was more of an exercise in “how much quality can I get for a nearly automated port” to which the answer was “nowhere near enough”. So I went back and spent a lot more time getting it right. Good experience learning the limits of agents atm.
0200
Joe Savona @en-js.bsky.social · 31/03/2026
Eagle eyed observers will notice the first commit on this branch was from *after* my post here. I threw everything out and started all over again! The original port was pretty good but had some fundamental issues. Things i had told the agent to avoid, but where it gradually drifted from the guidance
1100
Joe Savona @en-js.bsky.social · 31/03/2026
The React Compiler rust port is now up as an in-progress PR at github.com/facebook/rea... - more to come as we test and polish.
github.com
[compiler] WIP port of React Compiler to Rust by josephsavona · Pull Request #36173 · facebook/react
This is an experimental, work-in-progress port of React Compiler to Rust. Key points: Work-in-progress - we are sharing early, prior to testing internally at Meta, to get feedback from partners in...
39311
Joe Savona @en-js.bsky.social · 22/03/2026
“These are advanced features that can be skipped for now” Citation needed
070
Joe Savona @en-js.bsky.social · 12/03/2026
We primarily expect to publish integrations but happy to discuss on a GitHub issue once the rust version is out there and you can try it.
010
Joe Savona @en-js.bsky.social · 11/03/2026
I’m thinking we’ll switch to the Rust version only, as soon as it’s ready
060
Joe Savona @en-js.bsky.social · 11/03/2026
No, I think AI changed the tradeoffs
110
Joe Savona @en-js.bsky.social · 11/03/2026
General thought is that I wish I’d had the time to port by hand. You learn by writing. But alas. Anyway yeah, will try to share more learnings somewhere
050
Joe Savona @en-js.bsky.social · 11/03/2026
Once the port completes we have to iterate, test, look at perf, and then ship. Will try to get a ln experimental preview out asap.
190
Joe Savona @en-js.bsky.social · 11/03/2026
There are a few design choices the agent made along the way that I want to change, but nothing major enough to stop the process. I got the key design choices locked in on the initial plan. We’ll just do some polish passes at the end.
160
Joe Savona @en-js.bsky.social · 11/03/2026
One big unlock (h/t @ricky.fm) was to have the agent create custom agents for planning, implementation, review, and orchestration of the project. That’s now running for a few days with minimal intervention.
3110
Joe Savona @en-js.bsky.social · 11/03/2026
We’re pretty close to having an initial Rust port of React Compiler. My approach was to iterate on the plan document (write it manually, have the agent expand, edit, repeat). Then try to run it, see what goes wrong, revert back to the plan, tweak the plan, repeat.
49812
Joe Savona @en-js.bsky.social · 20/01/2026
Your post was totally fair! I appreciate you sharing your experience :-)
020
Joe Savona @en-js.bsky.social · 20/01/2026
The parts of the post describing subtle nuances are about which specific ways of breaking immutability the compiler does/doesn’t catch. But developers don’t need to remember which way of crafting an error will be caught or not! They just need to remember the rule, which is straightforward.
140
Joe Savona @en-js.bsky.social · 20/01/2026
Thanks for sharing your experience! We’ll take a look to see if there are any of the cases you flagged where we can detect an error automatically.
110
Joe Savona @en-js.bsky.social · 20/01/2026
There are two aspects: the rule & how we enforce. The rule is simple: don’t mutate stuff that crosses JSX/hook boundaries. You almost certainly follow this ~all the time, else you would have crazy bugs. What feels and is more complex is that we can’t statically catch all violations of this rule.
120
Joe Savona @en-js.bsky.social · 18/01/2026
What if we all got together and agreed to pay a bit of money to the government every year so that they could put together a group of trained people to protect us from masked thugs in the streets?
250
Joe Savona @en-js.bsky.social · 01/01/2026
We’re exploring a different direction but I don’t have a link handy. Cc @capt.dev
120
Joe Savona @en-js.bsky.social · 01/01/2026
Still something we have on our list to potentially optimize further in a future release
100
Joe Savona @en-js.bsky.social · 01/01/2026
In this example each element will “re-render” but what that means has changed: since each item will largely no-op if its inputs haven’t changed. With React Compiler a component function executing doesn’t necessarily mean much work happens.
100
Joe Savona @en-js.bsky.social · 31/12/2025
I hope we’ve earned enough trust that people don’t think we’re so naive as to _only_ rely on feedback that we hear about directly. We also look at things like adoption which accounts for people bouncing off for various reasons, as well as on our own judgment/experience.
020
Joe Savona @en-js.bsky.social · 31/12/2025
Did you already have ESLint running and our plugin slowed it down, or was the slowdown from switching from a fast linter back to ESLint?
110
Joe Savona @en-js.bsky.social · 30/12/2025
..and avoid rewriting the core logic. But more importantly: we are very actively expanding and building upon the compiler. We’ll hopefully be able to prioritize build performance sometime in 2026 but we’ll see how things go. The more we hear about it the easier it is to prioritize so send feedback.
192
Joe Savona @en-js.bsky.social · 30/12/2025
We get that reintroducing Babel in an otherwise Rust-based toolchain slows down builds. It’s a compromise. Unfortunately the Rust-based JS tooling ecosystem is fragmented - SWC and OXC - with different parsers and AST formats. We’re still hoping to be able compile with Static Hermes
1100
Joe Savona @en-js.bsky.social · 30/12/2025
Expanding on Dan’s answer. First, everyone on the React Compiler team had significant experience in Rust or C++, and several of us had also worked on rewriting Relay Compiler from JS->Rust before that was cool. The decision to use JS was purely about practicality..
140
Joe Savona @en-js.bsky.social · 18/12/2025
You may also be interested in react.dev/reference/re... to fail the build on errors
react.dev
panicThreshold – React
The library for web and native user interfaces
110
Joe Savona @en-js.bsky.social · 18/12/2025
So you should generally spread in the rules from the preset, and then override/add.
100
Joe Savona @en-js.bsky.social · 18/12/2025
Great post, and it’s great that the compiler is working so well for you! One thing to be aware of w the way you set up your rules: you’re missing out on most of the validations!!! In ESLint if you specify any specific rules, it disables everything else from that preset..
210
Joe Savona @en-js.bsky.social · 07/12/2025
Recent favorite: “test plan: yarn jest path/to/feature-test.js, all tests pass”. WE DONT USE JEST and the named test file doesn’t exist
050
Joe Savona @en-js.bsky.social · 06/12/2025
Trend I’m seeing getting worse recently: a legit GitHub issue gets filed. Somehow people latch onto it as something they can spam us on. Multiple similar PRs, often from different people sharing bits of code, that look 90% plausible but with blatantly obvious tells.
3180
Joe Savona @en-js.bsky.social · 04/12/2025
Try `/terminal-setup` in Claude, that fixed it for me
000
Joe Savona @en-js.bsky.social · 02/12/2025
Have you tried using React Compiler?
010
Joe Savona @en-js.bsky.social · 02/12/2025
Link to the issue?
100
Joe Savona @en-js.bsky.social · 02/12/2025
It’s in the docs (?)
000
Joe Savona @en-js.bsky.social · 01/12/2025
By default we don’t error in the Babel plugin because breaking builds is generally not preferred. But if you want to fail the build on errors, you can: react.dev/reference/re...
react.dev
panicThreshold – React
The library for web and native user interfaces
111
Joe Savona @en-js.bsky.social · 01/12/2025
React Compiler tries to automatically skip code that breaks React’s rules. Use the ESLint plugin to see the errors react.dev/learn/react-...
react.dev
Debugging and Troubleshooting – React
The library for web and native user interfaces
120
Joe Savona @en-js.bsky.social · 10/11/2025
I would offer to fix it but we didn’t build that extension :-) An official React Compiler IDE is in the works, for now we recommend using the ESLint plugin in parallel w the compiler.
110
Joe Savona @en-js.bsky.social · 09/11/2025
Yeah the word order just clicks after a while if you’re reasonably immersed. Vocab and kanji require study even if you’re immersed.
000
Joe Savona @en-js.bsky.social · 09/11/2025
Customize your deck for words and phrases that you actually care about, aggressively delete cards that are boring. The time to create cards is study time.
000
Joe Savona @en-js.bsky.social · 09/11/2025
One thing to watch out for with these sites is that the spaces repetition they use can be absolutely awful. WaniKani is *phenomenal* for learning kanji - or would be if their SRS wasn’t garbage. You waste so much time reviewing things you don’t need. Consider using Anki for your actual reviews.
100
Joe Savona @en-js.bsky.social · 28/10/2025
Fuck yeah, this is the way. Diverse teams build better products. Good for Python.
1132