First, we Remixed React Router, now we're ... React Router-ing Remix I suppose? Check out this blog post on how we're bringing all the latest RR 6.4 goodies back over into Remix in an incremental and non-breaking fashion!
@remix_run
1.10.0 is released! This is a huge milestone to kick off 2023. Sets the stage for really awesome feature iteration this year. I'm struggling to come up with a metaphor though that actually describes what this entails.
Who else loves deleting code?? We just merged months worth of work to remove all the Data API code from Remix that was moved over to React Router. This is the result of Remix now inheriting all that behavior from the Router 😀
Man this
@remix_run
router is awesome! A little hacking over the holidays and we've got got a working
@solid_js
adapter. Only ~700 lines of solid code - lots of which could be DRY'd up amongst the adapters. Great work from
@nivekithanS
!
Been doing this a long time and I knew the instant I saw Remix's patterns that they completely changed the game. I sent Michael and Ryan an email not long after, and the rest is history.
I still pinch myself sometimes that I get to work on Remix full time 💿
💯 this is the driving force behind React Router 6.4's data APIs brought over from Remix. Decoupling data fetching from rendering provides *huge* UX improvements
⚛️ React tip: you should almost never fetch inside render.
Start fetching as early as possible, e.g. on route change or when an event occurs (click, submit, etc.). Mental model should be:
✅ Read from fetched data in render
NOT:
❌ Start fetching in render
@TkDodo
The axios-lover in me always has a gut reaction of "why not?" But once I get past that I agree with fetch's implementation. If fetch receives a 4xx/5xx from your server then it succeeded in what it was asked to do, which is obtain an HTTP response from a server
OK
#vuejs
folks - who wants to help alpha test the Vue port of the new react-router 6.4 prerelease with all the Remix data loading APIs? Just published remix-router-vue
@0
.2.0.
Client Data in
@remix_run
is so close! If anyone wants to do any last minute beta testing, you can try it out in the 2.4.0 prerelease:
> npx upgrade-remix pre
File based routing is great 😀
Most of the time 🙂
OK, fine, sometimes 😐
And sometimes it's annoying 🙁
Sometimes you just want to points paths to files via JSON/JSX (instead of the other way around) 😎
Had a great IRL chat with
@dan_abramov
and
@ebey_jacob
today at
#RemixConf
to help understand the nuances around React RSC and it's impacts on bundling and routing (and help clarify the lines between React/Next).
Twitter threads are terrible for understanding these nuances 🤣
Just got a preview of Remix SPA mode from
@brophdawg11
and it's going to be great, will show off as soon as we can.
Get your React Router apps onto Vite ASAP if you've been wanting to upgrade your React apps 😎
@mardo12341
@ryanflorence
Yeah - automatic file system routing plus full document hydration and head management via Remix <Links>/<Meta>.
And, you’re now one small config change away from a server runtime should the need arise. Plus any future applicable Remix goodies.
Data so fast you'll puke! 🤢
- instant transitions with prefetched loaders
- dodge the network with client caches
- instant search with indexedDB data replication?!
Releasing one video per day
YouTube Playlist:
Live Demo:
Folks can basically do Remix SPA today:
* Export root HydrateFallback w/<Scripts>
* Only use clientLoaders/Actions
* npm run build
* npm run start
* curl
http://localhost:3000
> public/index.html
* npx http-server public
Our job is will be yelling at you for doing non-SPA stuff
Overheard in the Remix Discord:
> Just walked one of our junior engineers through converting one of our existing [component/client-side fetching] routes to follow Remix patterns and the response was "omg this is so much easier to understand what's going on"
Love to hear it!
Excited to speak about the
@remix_run
framework-agnostic router at 2 conferences this fall! This is the backbone of the new React Router 6.4 release and opens the door to leveraging the Remix Data APIs in the framework of your choosing! 1/3
Playing around a bit with view transitions this afternoon. Thanks to
@brophdawg11
for getting this example started!
Pretty funny to mess with, and the resulting code change is pretty small. Definitely not perfect tech yet
This has been a very common source of questions in React Router 6.4. Finally got around to putting together an
@auth0
example using RouterProvider where the authentication state is managed *outside* of the React tree, so no useAuth0() etc.
Had an awesome birthday dinner with the fam this weekend to celebrate my 40th. Thankful we're all in close enough proximity that we can do this without much travel.
👀 If React Router's `route.lazy` is not quite enough for your code-splitting needs - you may want to check out this new Lazy Route Discovery proposal (aka "Fog of War")
@BrooksLybrand
🎯
I don't think I want want the celebrity retweet! I'm pretty sure sub-1k followers is the sweet spot where I can safely tweet into the void and not get reply-guy'd by the ... waves hands ... rest of twitter
I absolutely love the number of “or not” steps in here. I have come to see “Remix” as a set of rock solid abstractions to build awesome apps (routes, loaders, actions, fetchers, forms, etc.). How you serve/deploy said apps is for you and your team to decide.
Remix is dedicated to building incremental bridges to the best frontend innovations the React community has made and continues to make.
Everything after step 2 is incremental and optional.
1️⃣ Migrate from react-scripts to vite (hardest step):
2️⃣ Migrate
Just published remix-router-vue
@0
.4.0 with support for useSubmit, useHref, and useResolvedPath. Getting closer and closer to API compatibility with react-router-dom 6.4 (currently in prerelease)
Check out Ryan's talk for an overview of some of the new goodies in React Router 6.4 (in prerelease currently)!
These data loading (and mutation) approaches from Remix _change the game_ for SPA apps - and are likely coming soon to a Vue app near you 🥳
We're excited to publish
@ryanflorence
's full talk from Reactathon: "When to Fetch: Remixing React Router"!
You can see the first minute in the short clip below, and watch the full talk for free on YouTube here:
I've actually had a conf talk idea bubbling around in my head along these lines 😬
Enough likes and I'll submit a CFP for "Using Remix/RR SSR to SSG/PPR an ISR-enabled MPA that hydrates into a CSR SPA"
In a future where improvements from
@remix_run
+ RSC feed back into React Router, I'll be able to say:
"My website is RR SSR + RSC. It's CSR'd after initial load. Subscribe via RSS!"
...RSC,CSR,SSR,RSS,RR...
It's like some weird haiku-like gibberish😅
💯 once again for the folks in the back. This might be the single best piece of advice I'd give to a mid-level dev looking to level up. It's helped me tremendously in my career. And ... the best part is that the abstraction is (almost) never as complex as you might expect.
I've said it before and I'll say it again: Understanding the abstractions you use will make you more effective at using them. ✨
Example I've been thinking about recently: Even if you aren't building your own authentication solution, understanding how it works will make you more
I got tired of spinning up raw React SSR reproductions to test out weird hydration-related bugs in Remix so here's how to do React SSR in a single Node JS file without JSX/bundler/framework
🎉 I am *so* excited about this! Having spent much of my career in E-Commerce I know just how important fast/resilient experiences are. I can't think of a better stress test for the Remix framework than ensuring it can handle all the use cases E-Commerce presents.
★ The
@remix_run
team has joined Shopify!
Win-win as we put the power of Shopify behind
#Remix
allowing them to accelerate their roadmap & focus on pushing the web forward & they will help deliver next-generation web experiences for our merchants & devs.
This is so awesome to hear!
Coming from Vue myself, I had the same reaction when I tried Remix. It was a large reason I joined the team
Remix abstracts away so much (routing, state mgmt, fetching, mutations) that the “React” part almost simplifies to “just write HTML via JSX”
I built my first web app using
@remix_run
with a Node backend and it was such a nice experience as a developer and helped me produce a fantastic UX.
I'm a Vue guy through and through, but Remix makes React look good!
Sneak peek coming soon, public release tbd.
We’ve don’t some “telling” but not yet done a good enough job of “showing” this incremental path from React Router -> Remix IMO. Expect more to come in this area! We’re really invested in making this transition *easy* and *incremental*
Incremental Create React App 🚍➡️ Remix SPA
Check out this baby commit as I migrate an app:
• Still SPA, no JS server needed
• Old <Routes> still work, you don't have to change app code to get started
• Don't need gross file routes, use config
• Totally incremental!
Now
This is crazy. I've worked on some cool closed-source stuff in my career, but OSS at *this* scale is still sometimes hard to comprehend. Super humbling.
Kudos to
@mjackson
and
@ryanflorence
for such an awesome lib, and for trusting me to help with it!
Got it!
So crazy. You all rock 🤘
Building React Router has been one of the most rewarding experiences of my career. Open source is so cool.
Onward to 2 billion!
Awesome time this week at
#RemixConf
, great talks + met so many amazing community members who are all just so psyched about the future of the web.
Capped it off with an awesome (read "exhausting") mountain bike ride up into the canyon. This sure ain't eastern PA biking 🥵
📣 Remix v2 pre-release is out!
Let's see if our strategy worked! If you're up-to-date on all future flags, this should be the most boring major upgrade you've ever had.
Remote work is great for many reasons
…but you simply cannot replicate the excitement/innovation you can get from a few days IRL.
I always come away from these Shopify “Bursts” so energized and excited about the future. Such a good pattern for this new world of hybrid work.
So pumped to see this finally reach stable! So many great minds worked together on these APIs. I can't wait to see how much they help folks provide better UX, all while simplifying app logic, shrinking JS bundles, and getting a pretty awesome DX in the process. Happy coding!
🚀 React Router 6.4 is here!
When you realize <a> and <form> are the same, your router gets very powerful.
- Data loading/mutations/revalidation
- Error/interruption/race condition handling
- Pending/Skeleton UI w/ <Suspense>
(Posting mostly to keep myself accountable)
I’m 1 week into
@benbruno1
’s weight training program and digging it so far. I’ve always hated going to a public/crowded gym - turns out I enjoy a simple garage home gym much more (adjustable bench + adjustable dumbbells)
Look at this thing on 3G throttling!
I'm more proud of Remix's `useFetcher` than anything I've ever built, and proud of a great team that cleaned up my initial implementation of it.
1. On drop, kick off a fetcher w/ the card, column, order in the form body
2. When rendering,
Really great article by
@jefgodesky
on Progressive Enhancement and how it's about *far* more than "users who disable JS." Really awesome visualizations around what it really means when we hear "oh but JS only fails to load a small % of the time"
This was super fun to dig into these past couple of weeks!
Remember - thoughtful animations - don't just go throwing wild animations all over your sites. They should improve the UX, not be a distraction.
Like to live life on the edge? Remix and React Router now have an experimental, declarative way to leverage the View Transition API
Checkout
@brophdawg11
's fork of
@astrodotbuild
's awesome Astro Records demo 👉
Learn more here 👉
@acdlite
I feel like I noticed cognitive "endurance" drop around ~35. Used to be no problem to code at work all day and then code personal stuff in the evenings. More and more I'm wiped in the evening hours.
Join us for the 12 days of Trellix 🎁
From now until Christmas we'll release a daily Remix Single, each based on Trellix, a Trello clone with some advanced UX. We're covering topics like User Auth, Pending & Optimistic UI, Drag & Drop, and much more! 🧵
Re-posting this 🧵 again - absolutely worth a watch.
Even if you don't use Remix - Ryan's level of detail/thought for UX never ceases to impress me so I always learn of UX patterns and edge cases I should be considering
Join us for the 12 days of Trellix 🎁
From now until Christmas we'll release a daily Remix Single, each based on Trellix, a Trello clone with some advanced UX. We're covering topics like User Auth, Pending & Optimistic UI, Drag & Drop, and much more! 🧵
Met my wife (+ her 🐕🦺) in 2015
First date 2015
Moved in together 2017
Engaged in 2019
2nd 🐕🦺 2019
Backyard COVID wedding 2020
Postponed wedding celebration 2021
Buying our first 🏡 - 2024 🤞
Met my wife in 2010
First date in 2011
Engaged 3 weeks later
Married 90 days after the first date
Baby
#1
in 2012
Baby
#2
in 2013
Baby
#3
in 2015
Baby
#4
in 2017
Baby
#5
in 2023
So excited for the future!
What's your story so far?
If anyone's interested in beta testing next week - many months worth of work went into this one and we'd love any help ensuring it's as stable as it can be!
Just shipped: 1.10.0-pre.5 🚢
Normally we wouldn't talk much about a pre-release, but we think this one deserves some attention.
A little gift for you this holiday season 🎁
File-based until it's not suiting your needs. Then config-based
🌶️ version:
File-based until you get the urge to tweet that file-based routing sucks, then switch to config-based instead of tweeting
Interested in learning Remix?
I'm giving a full-day Remix Fundamentals workshop at
@connect_js
in Atlanta in October! Use the code SEEMESPEAK to get a $50 discount and come learn Remix (and the Web) with me and see other great speakers present!
The latest react-router 6.4.0-pre.9 prerelease now supports deferred responses to let you separate critical and lazy data for your routes!
If you're all like "what's a deferred?", check out minute 20 of Ryan's talk at Reactathon
This is the way. Happened in my 30s as well and at this point my socks, tee shirts, hoodies, polos, jeans, khakis, and lounge pants are almost all identical items in different colors.
as a man enters his 30s, he develops an appreciation for standardization. for example, five years ago, i threw out all my mismatched socks and bought 30 pairs of the exact same socks in the exact same color. when i find jeans i like the fit of, i buy a few identical pairs. last
@acemarke
Sentry bundle size has bit me in the past. Had some success manually wiring up error listeners that lazily import sentry only upon the first encountered error, and then fire off the error through their imperative APIs. Then sentry can take over for errors 2+
Just like last year, so cool to see how many of these talks are covering the Web platform instead of being highly targeted to Remix APIs.
Also cool - now that React Router has all the Remix data APIs - most of these talks will be relevant to your RR apps as well!
🔥 This is what we theorized would happen in practice. Remove your component code for fetching, loading spinners, error handling, revalidation, etc. and let RR handle that for you! At scale, the added RR size should be a fraction of what you get to delete.
Client Data in
@remix_run
is so close! If anyone wants to do any last minute beta testing, you can try it out in the 2.4.0 prerelease:
> npx upgrade-remix pre
We've been hinting at it, and now it's time ...
... to mix things up! Can you guess what’s coming?!
🎉 We are adopting new foundations based on
@remix_run
! 🎉
We’re excited, and we hope you are too! Read all about our plans ↓
#FrontEndDeveloper
#remix
SLC 🛫🛬 PHL
Headed home from another successful
#RemixConf
. Love seeing the awesome stuff folks are doing with
@remix_run
in the wild!
Related - red eye flights are the worst.
Tired of Sentry eating up space in your critical path JS bundles? You can try waiting for the first error to occur _before_ loading Sentry with some manual error capturing. Likely not appropriate if you use Sentry for Web Vitals though 😞. Vue example:
Almost time to shut the 💻 and go play about 80-100 holes of ⛳️ starting this weekend. I'm going to have the back of a 90-yr old when this is all done 😂
@jpschroeder
This is the sole reason I've used twitter as much as I have in the past 5+ years. I felt like nothing else came close to keeping me up to date on the newest stuff
Big shout out to
@prpatel
and
@vincentmayers
for putting on a great
#connecttech
conf! Honored to give my first non-lightning talk on the new framework-agnostic Remix Router. Met and chatted with a ton of great folks as well!
@dadamssg
@remix_run
@tannerlinsley
This is great feeedback, thanks for writing it up! I think we have open proposals for some of these already - definitely go give them an upvote if you haven't already. Specifically: submitting non-FormData as well as a call-site fetcher revalidation option.
@jessegavin
Remix *is* incredible (that's why I joined!) and I'm also a huge fan of Vue. The data loading/mutation abstractions are just too good to keep isolated to one UI library, so I do plan on getting something published for Vue soon. It's just for SPA apps for now though - no SSR