I do enjoy Remix though. It works well and the various stacks help you get started pretty quickly. So why take the framework that's well respected and loved, and combine it with the library that's known for its churn? That seems like a lose-lose. You create yet another change for people still on React Router and lose the Remix brand.
Did the Vercel people manage to execute a psyop on Remix? This doesn't feel like the move.
Remix has one of the best stars/issue ratios I've ever seen in a large project. They have 27k stars for 228 issues (118 stars/issue). Meanwhile next.js has 121k stars for 2678 issues (45 stars/issue).
Remix also has a robust future flag system to ensure nothing breaks during transitions. https://github.com/remix-run/remix/issues/4598
For larger changes (like the controversial flat routes), they even maintain the old feature so you don't have to upgrade. https://www.npmjs.com/package/@remix-run/v1-route-convention
I don't think the evidence supports your assertion.
I do find their open source libraries a good juxtaposition of engineering philosophy for the tanstack ecosystem.
Tanstack seems to favor making things modular over time so it's easier to create bindings in other libraries while also increasing the enhancements whereas it feels like Ryan Florence and Michael Jackson prefer to get features out faster even if it means throwing away previous code.
I feel like I'd still be using tanstack/router, tanstack/table, and tanstack/query in 2030 compared to even react itself.
One of my biggest problems with router was not only the constant api changes but the docs being unsearchable because you are never sure which version people are talking about, making all discourse about it a waste of time.
We await the outcome of the react framework wars, I still think react is wrong requiring frameworks to supplement its framework.
If you watch the react conf video by Ryan it explains it all well.
Yeah I hate to be negative, but honestly I was a lot less excited about Remix once I found out was react-router team. While serving a useful need and I appreciate their work, using react-router in a large production app (MPA) was series of frustrating updates and rewrites once we needed to update (we did not have luxury of just leaving old code as is). The iterative churn and rethinking of design scared us off from Remix for the time being.
You just hope someone has asked it on SO.
From a marketing perspective, I'm not sure if it's genius or insane. It's going to get a lot of people on the platform currently called Remix, but I also feel like Remix has built a strong brand and not having a project that uses it explicitly feels ... suboptimal.
I used to use react-router many years ago, but I eventually got fed up with the breaking changes and switched to wouter for most projects. It's much simpler and I rarely have to think about it.
Remix was interesting. but since I also had native mobile apps using the same backend as my webapps, I just wasn't interested in running a whole other backend in between the webapp and my API. SSG and some SSR capabilities easily deployed to a serverless runtime would be nice, but I'm completely uninterested in RSC or a server runtime for my webapps at all. When Remix SPA mode was announced, I was intrigued, but couldn't really see what Remix did for me beyond what I already had setup with Vite + Wouter.
It sounds like Remix will be discontinued and anyone using it will need to upgrade to React Router? Is that not going to be super super confusing?
https://remix.run/blog/remix-heart-vite
https://remix.run/blog/remix-vite-stable
At this point the separation between the two projects is seeming more and more like a lot of rigmarole for nothing. Imagine running two projects that are 90% the same, and every time you change one you have to make a release and update the other, etc etc.
Mmm.
I'm know that technically remix supports static builds (1), but it feels like a bait and switch to turn a client side library into a server side framework.
Am I cynical in think perhaps there were two projects and one of them was more popular than the other (like, 2x more popular say...), so maybe if we take the unpopular package merge it to the popular one people will not notice and we can just pretend we only have one popular package?
Maybe we should just merge all the packages in npm into one package called 'all'. That would be soooo popular, great victory!
I'm joking; but taking this to the extreme makes the point; this is unabashed and unwanted bloat for people who just wanted react router; if people wanted remix, they would use remix. If you don't want to maintain two packages, don't; but this is a bit :|
> and now Remix and React Router are basically the same thing
Mm. That's not how I would describe the difference between a server side framework and a client side one.
And I think that's exactly what the React ecosystem needs right now.
There has been a growing split between client-side React and server-side React, with most existing React applications being client-side with no easy path to server-side that didn't involve a full app rewrite in Next.js or Remix.
The new React Router Vite plugin is that easy path to server-side React that people were looking for. If you're using React Router (like most client-side applications do), you're already 90% of the way there.
a) most teams/apps/projects want to switch to using server-side react (?)
b) the reason they haven't switched is not because a) but because it involves a full re-write of their code (??)
c) vite plugin would be an easy path to server-side react (??)
d) this easy path is what people were looking for
e) that somehow, all the teams out there that wanted to switch their project to server-side react, but thought they couldn't, just simply didn't realize they were 90% of the way there
I'm not really sure where to start, but let me explain some of the reasons a lot of teams / apps / people use the client-side only version of react / <insert favorite routing library>:
1. it allows teams that are pretty much front-end only, to mainain their autonomy
2. it allows people to maintain a clear split of responsibilities
3. a lot of front-end teams have no experience running server-side stuff in production
4. a lot of teams would not really benefit from server-side react - or the main benefits would be neglegable performance benefits, which might not even be perceived at all
5. a lot of people / teams have a backend-team that uses a completely different stack / programming languages - so they would not even be able to help or assist when things go badly when there are issues - or help with training the front-end people to deal with server side configuration/deployment/issues/node.js stuff (as much as we all want to pretend server-side react is not actually a node.js app, it is)
6. there's also a lot of people that just have a philosophical point of view that there should be a clear distinction between front-end and backend - and that these things should remain very clearly separated.
Now, I know these are not unsolvable - and some might be based on some misunderstanding and/or arguably wrong opinions/takes - there is a way for every team to get into some middle ground - eg. treat the server side react as kind of a front-end server or like a caching layer - but the topic is nuanced enough that it's impossible to give a concise solution in a single comment.
If you don’t need to, fine, but also understand it just sounds ignorant given their size and many years of news around them.
What's even weirder is that they could copy the structure from dozens of other frameworks, some of which are nearly 20 years old now, which have solved pretty much every possible problem already.
But no, just throw views,data, io, auth checks etc. everywhere and hope it builds.
Looking at it closely I think the latest version of the react-router is better than previous ones, I upgraded the particular app I was working on because it is busted anyway and not very big but I can think of two or three other apps using RR I maintain that I am not going to upgrade any time soon, particularly some of those use class based components which won’t do the best with the current hook API anyway.
I see the appeal of the matching client-server environment it is a dream the web industry has been pursuing since 1998 or so but we already have a server and don’t need a new one.
All of this just so that they can brag that their framework has more stars/downloads than Next.js, because there's no other reason to do this than to "show" who's more popular.
And while it's true react-router has a shitload of downloads, most of those downloads are for really old versions, because people can't update due to all the constant rewrites and changes of APIs. I've seen this at 3 companies already, nobody is using the latest versions.
NPM should show download metrics by version (as packagist does for PHP packages). I'm convinced this will prove it.
But hey, this works. Now they have more downloads than Next so let's use this instead.
(BTW, Remix was still a better option than Next in my opinion, but that's a super low bar)
https://www.npmjs.com/package/react-router-dom?activeTab=ver...
As it happens, I was curious about the same thing last year and wrote a script you can run in the browser console to add them up, and it does prove something:
react-router-dom
v6 5820458
v5 3274886
v4 275081
react-router
v6 5993187
v5 3366625
v4 302549
v3 156121
v2 25726
v1 8448
v0 2447
Code here: versionsHeader = Array.from(document.querySelectorAll("h3")).find(
(h3) => h3.textContent === "Version History",
);
// requires a second .nextElementSibling for react-router
// because of the deprecated versions checkbox
versions = versionsHeader ? versionsHeader.nextElementSibling : null;
nums = Array.from(versions.children)
.slice(1)
.map((el) => [
el.children[0].textContent,
parseInt(el.children[2].textContent.replace(/,/g, ""), 10),
]);
for (const v of [6, 5, 4]) {
const sum = nums
.filter((c) => c[0].startsWith(`${v}.`))
.map((c) => c[1])
.reduce((a, b) => a + b, 0);
console.log(`v${v}`, sum);
}