We moved Railway's frontend off Next.js. Builds went from 10+ mins to under 2 (blog.railway.com)

121 points by bundie 13 hours ago

miyuru 10 hours ago

I just tried their domains page it took 10.8MB of data and took 2s for the DOM to be ready.

page actually took 17s to fully render with multiple shift changes.

all to render a domain search bar similar to google home page.

https://railway.com/domains

petcat 2 hours ago

web dev is a sewer

All my projects are server rendered with jinja/minijinja, bootstrap, jQuery, and htmx when I need a little bit of SPA behavior on forms.

No builds, just static <script src= tags. Very fast and easy. I'll never recommend anything else.

nicksergeant an hour ago

I'm coming back to Django after a decade of experience with it post-0.96 and having moved to Next.js a few years ago. Going from 1,700 dependencies to 65 total with Django + Wagtail + HTMX.

pjmlp 25 minutes ago

When I am given the choice to pick a stack, it is classical Java and .NET Web frameworks, with minimal JavaScript.

On hobby projects same script approach without any kind of build step.

giancarlostoro an hour ago

With C#'s Blazor templating, you can ditch all JS logic, and use raw C# for all front-end logic, and have it all be transparently server rendered similar to how Phoenix has LiveView.

I also have experimented with HTMX and Django, and that seems to be a nice combination.

Everything is AJAX again.

toddmorey an hour ago

There are some easy optimizations wins for this page but none of the top ones are framework related. Maybe with the faster build times they can easily optimize images and 3rd party dependencies. As someone else pointed out, nearly half that data is unoptimized images.

For the curious, google's current homepage is a 200kb payload all in, or about 50 times smaller.

mattmanser 43 minutes ago

Who remembers sprite sheets? Does that give my age away?

I did an optimization pass for a client once where I got rid of a ton of the sprites but didn't have the energy to redo it all, so it just had huge sections that were blank.

Super snappy loading afterwards though.

ricardobeat 40 minutes ago

anematode 2 hours ago

Dear lord. It's actually laggy for me to scroll on that page.

hazelnut 2 hours ago

same here and I'm using a beefy MacBook (Apple M4 Max, 64gb ram). something is wrong with the front end code. there are a lot of animations, so my hunch would be that something goes wrong there.

gib444 2 hours ago

The 3.57MB background PNG is hilarious [0]

[0] https://railway.com/dots-oxipng.png

picardo 37 minutes ago

They could have saved themselves 3MB by converting it to AVIF.

rubyn00bie an hour ago

Ha! I normally wouldn’t find it quite so hilarious, but it’s a stylistically pixelated image. There’s just too much irony packed in there to not chuckle.

l5870uoo9y 10 hours ago

I migrated the landing pages for my app[1] from Nextjs to Astrojs mainly because I was paying Vercel $20 per month for serving static pages(it’s 4 times more than I pay Railway for the Postgres database for the actual app and also 4 times more than I pay Cloudflare for hosting all my apps). I used AI for migrating and it took a few days only as the existing repo was used as “instructions” and it included some upgrades and improvements here and there.

[1]: https://www.sqlai.ai/

xandrius 2 hours ago

Why is everyone so afraid to get a $5/mo Ubuntu/Debian VPS, install nginx and call it a day?

Then you can even run multiple projects off the same server.

kennu an hour ago

It means you take responsibility of maintaining the server forever, i.e. dealing with TLS certificates, SSH keys, security updates, OS/package updates, monitoring, reboots when stuck, redeploy when VPS retired, etc. Usually things work fine for a year or two and then stuff starts to get old and need attention and eat your time.

shimman an hour ago

skydhash 2 hours ago

No click-ops that way.

kami23 2 hours ago

I just did this over at Hetzner and Claude admins it for me so I don't need to learn the CLI or anything, describe the proxying I want, and it setups up a bunch of small side project pages for me.

kamikazeturtles 11 minutes ago

xandrius 2 hours ago

christoff12 9 hours ago

this is neat

tgdn 11 hours ago

We went through a very similar migration. Had a Next.js landing page and a separate TanStack Router SPA - consolidated both into a single Vite + TanStack Start app. Same experience with build times and the architecture mismatch: our app is heavily client-side with real-time state, and fighting Next.js's server-first assumptions wasn't worth it. TanStack Router's type-safe routing and file-based route generation have been great.

SilverSlash 10 hours ago

I hadn't heard of TanStack but a quick look at their website doesn't inspire confidence tbh. I mean, just take "TanStack Pacer".

It provides such things as:

```

import { Debouncer } from '@tanstack/pacer' // class

const debouncer = new Debouncer(fn, options)

debouncer.maybeExecute(args) // execute the debounced function

debouncer.cancel() // cancel the debounced function

debouncer.flush() // flush the debounced function

```

Why? Just why do you need to install some "framwork" for implement debouncing? Isn't this sort of absurdism the reason why the node ecosystem is so insecure and vulnerable in the first place? Just write a simple debouncer using vanilla js...

tacker2000 3 minutes ago

TanStack started out by providing a very good JS table library. Now they offer a Router, and some more libs. They are definitely an up and coming name in the JS space.

MajimasEyepatch an hour ago

Obviously it's more than just debouncing. https://tanstack.com/pacer/latest/docs/overview

Hendrikto 10 hours ago

Two minutes is still way too long. What are we doing? This is ridiculous.

rishabhparikh an hour ago

2 mins for a production deploy of an app with millions of users? Seems fine to me! How fast would you expect it to be?

BoredPositron an hour ago

How does an apps user base affect its build time?

selfmodruntime 10 hours ago

We're doing structural type checking for a language that wasn't developed with that in mind.

UserMark 11 hours ago

I have a Nextjs heavy app which takes around 7 minutes currently. But I've been thinking of moving away from next for a long time now. TanStack seems to be a good fit. This gives me a bit more confidence in just doing it.

cryptonym 10 hours ago

Is server-rendered HTML that bad for 2026 web or is everyone building complex apps?

Many of my customers insists on using Next.js or similar but when I browse their website I don't get the point. They are downloading and executing megabytes of JS while in-page interactions tends to be limited to few basic stuff. Never seen one of their project requiring offline mode. Maybe that's being able to easily replace a [FRAMEWORK] dev with another.

sosodev an hour ago

I think the unfortunate truth is the simplest. Web development has long been detached from rationality. People are drawn to complexity like moths to a flame.

pjmlp 23 minutes ago

It is fashionable, and Vercel has made a chain of partners that make Next.js/React the only official option to extend SaaS products.

nomel 10 hours ago

I made two serious attempts to get into front end web development, around 5 years apart. Both times I started with the most popular framework. Both times the most popular framework was something different before I even finished the project.

Looks like maybe things haven't changed much?

Kelteseth 11 hours ago

As a cpp developer I had to chuckle there. And I thought our compile times were bad.

abustamam 10 hours ago

I've been pretty happy with TanStack start for a medium-sized project. I would not know how its build time would compare to Next, but our similarly sized Remix (sorry, React router v7) app takes longer to build.

TanStack just has a nicer mental model overall and works great with TanStack query for cache I validation and stuff like that.

Remix was promising but there was so much ceremony in registering API routes and stuff. Tanstack just lets you define server functions arbitrarily with no ceremony.

Might be worth a spike and some tokens to ask Claude Code to migrate and test the build time and ergonomics.

UserMark 8 hours ago

I've been on the remix on a previous project, I have to say that Remix was even worse. But that's probably of the setup with vite etc not being correctly done.

wilson090 10 hours ago

Are you on turbopack? It's available on Next 16 and just took our build times down from 6 minutes to 2 minutes

cbovis 9 hours ago

Yep this is what's often misunderstood.

We also recently cut our build times in half moving from Webpack to Turbopack on production builds after jumping to NextJS 16. We'd already been using Turbopack in development for a while which yielded massive DX improvements related to performance. Production build times will drop further once Turbopack production build caching is stable.

Webpack -> Turbopack is the smart initial migration. I'd bet Railway went straight from Webpack -> Vite not realising that their real gains sat with the build tooling, not NextJS vs Tanstack.

UserMark 8 hours ago

Yes I'm on turbopack and running the latest version of Nextjs.

SilverSlash 10 hours ago

A lot of the LLMs are very familiar with next.js and vercel is also aggressively building an ecosystem around their tooling for LLMs. So I wonder if this problem will only be exacerbated when everyone using LLMs is strongly nudged (forced) to use next?

ai_slop_hater 10 hours ago

When you create a Next.js project from Vercel's template, you get an AGENTS.md that literally says "THIS IS NOT THE NEXT.JS YOU KNOW"

mcintyre1994 10 hours ago

Is that because LLMs default to the older pages router? Or are they actually providing a different version of the library optimised in some way for agents?

ai_slop_hater 10 hours ago

GrayShade 10 hours ago

We've had shitty bloated websites before LLMs were a thing.

wouldbecouldbe 10 hours ago

The irony is deploying NextJS on the railway platform is super slow since they use containers, on Vercel 2 min is like 12 min on railway, deployments on a vps are only like 20 seconds.

*I know this is just build time, so this is different then their deployement time

huksley 10 hours ago

Not containers to blame but overprovisioning and how much resources dedicated to building. I am not sure how Vercel gets things build in literal seconds, but, hey, they are the creators of NextJS.

At DollarDeploy we building it also in containers but every build get 4GB/2CPU so it is quite fast but not as fast as Vercel.

pjmlp 21 minutes ago

Turbopack, custom runtime infrastructure on top of AWS Lambda.

jspaetzel 11 hours ago

Incredible that the builds were ever 10min. How far things have regressed.

oefrha 10 hours ago

Time to move your blog off Next too? It’s slow as molasses for me, loads a billion JS chunks and JSON fragments, when it can be a static site.

lukasholzer 8 hours ago

This is the kind of post I wish more teams would write. The "we picked the popular thing and it got slow" story is so common. But most teams just live with it. They don't want to touch it. 10 minutes to 2 minutes is huge for dev speed!

I'm a huge fan of tanstack start especially the ability to just static prerender some paths (a feature I'm missing a ton with astro) For me tanstack start is the new dominator on the stack!

eino 10 hours ago

We made a similar move from Next.js to Vite (with Tanstack router): CI build dropped from 12 min to barely 2 min. We won't look back.

sakopov an hour ago

Can we just get back to html/jQuery/handlebars? Those were the good old days :`(

fnoef 10 hours ago

:suprised_pikachu_face:

Is the quality of software engineers really dropped that low that people get excited when they move off from "heavy bloated" frameworks to lighter alternatives? Or is this just SEO farming garbage to position the company higher in search results?

yla92 9 hours ago

Both can be true at the same time!

samwreww 11 hours ago

They don't even mention the Next.js version used - where they using Turbopack or not?

wilson090 10 hours ago

excellent question - recently switched from turbopack after getting annoyed by build times. we saw them go from 6 mins to 2 mins

pjmlp 9 hours ago

Zero references to Turbopack, maybe start there?

mellosouls 11 hours ago

Reminder, as its not mentioned:

Next.js is produced by Vercel, a competitor to Railway.

debarshri 11 hours ago

Moving to vite + tanstack builds faster is also a fact.

pjmlp 9 hours ago

Only if they weren't using Turbopack.

lukasholzer an hour ago

cryptonym 10 hours ago

True. That framework is owned by a cloud company and the way they host Next.js apps in a secure and scalable way remains secret sauce.

Now it doesn't really impact build time and Railway offers Next.js hosting.

abustamam 10 hours ago

It's not mentioned because it's not relevant.

mellosouls 10 hours ago

Of course it should be mentioned, it's a basic disclaimer.

norman784 10 hours ago

I don't know the situation now, but a while ago there were a lot of pushback using Next.js because it was not easy to use all features if not hosted on Vercel.

abustamam 6 hours ago

mlnj 11 hours ago

This is one of the most frustrating thing about working with NextJS. There seems to be no way to improve the speed of building the app.

abustamam 10 hours ago

I've used the other major meta frameworks (remix and tanstack). I don't think there is a way to improve the speed of building the app in those ecosystems. Happy to be proven wrong.

huksley 10 hours ago

Anyone tried to use vinext from Cloudflare in production? Might be faster.

But seriously, not sure why NextJS builds take so much, we are using stable and functional pages router in DollarDeploy and it is still takes too much time to build.

mememememememo 10 hours ago

Wait till you use HTMX!

SilverSlash 10 hours ago

As in, htmx is better? I haven't used it but last I looked into it I was extremely confused as to whether it was a meme, an actual framework, or both.

0x457 14 minutes ago

HTMX is great when your web interface is just a representation of a server state.

If web interface is an application backed by a remote state HTMX falls apart.

mememememememo 9 hours ago

None of the above. It is a utility (I guess framework maybe) for a feature that was cool in ASP.NET back in 2005. But that is it's charm. It is just JS swapping out the dom for you.

recursive an hour ago

maccard 11 hours ago

It’s absolutely mind boggling to me that we have gotten to a point that building a web frontend takes longer than compiling the Linux kernel..

Hamuko 11 hours ago

As a non-frontend developer mainly observing and touching something here and there, a lot of the things that frontend developers do seem vastly over-engineered.

ramon156 11 hours ago

I'm not insanely deep into frontend, I mostly just pick up React and call it a day, but it seems like this is also over-engineered?

I've seen vanilla JS before, and I just know I wouldn't want to do the housekeeping that comes with it. People claim it's less work because it' simpler, but I fully expect myself to rewrite the thing at least twice, only to give up because I have no actual mental model anymore of how it works.

selfmodruntime 10 hours ago

thibran 11 hours ago

Isn't the main problem that the building blocks the modern web is based on are not a good fit for what we do with it?

CSS is a total mess. HTML is a mess. JS is okay, but is not a high quality language.

We would save so much time and money if we would have a modern base to build on. Sadly this will probably never happen, because company interests will try to corrupt the process and therefore destroy it.

selfmodruntime 10 hours ago

maccard 9 hours ago

This is my understanding too - tools like react are like microservices - they’re a technical solution to an organisational problem. HTML/css/JavaScript is an imperfect abstraction, so we got bootstrap. Then we got client side frameworks which introduced a build step, and then we got asset bundles, optimisers, linters, validators, tree shakers, package managers, validators for your package managers. All of these monkey patched around the actual problem with more abstractions, and the end result is what we have now.

mmarian 3 hours ago

Not that backend is any better - microservices everywhere, must scale to Facebook traffic even if we only have 10 customers, etc. Saying this as a backend dev

pjmlp 9 hours ago

Like using SPAs for classical Web development, and then they rediscover PHP.

itopaloglu83 10 hours ago

It’s mind blowing when you check the generated code, because it goes over 50 elements deep for a simple looking website.

Makes me think that there’s no way this is computationally efficient either.

crooked-v 10 hours ago

rafaelmn 4 hours ago

And underenginered at the same time !

nixpulvis 10 hours ago

Same reason why 90% of websites have serious UX issues and constant bugs. This and ad frameworks.

selfmodruntime 10 hours ago

C is infinitely less complex to parse and validate than Typescript. C is compiled in a single pass, the `tsc` type checking algorithm has to check structural typing, conditional types and deep generics while also emulating JS' dynamic behaviour.

iptq 10 hours ago

I don't think any C compiler has been single pass for the last 20 years. Typescript's analyses are also not that complicated, it's just that the typescript type checker is written in js. Iirc the actual ts -> js part is pretty fast with some of the more recent compilers.

HeavyStorm 9 hours ago

That's not the point...

maccard 10 hours ago

I disagree - this is an excuse. Even the post we’re commenting in now shows that it’s a series of poor abstractions and bad tooling that takes way too long to do the basics, combined with a language and ecosystem that encourages this behaviour . They saw a 5x speed up by changing tools while still using a JavaScript framework so it’s clearly possible for it to not be complete nonsense.

sanghyunp 10 hours ago

The two-PR strategy is smart — decouple from the framework first, then swap it. That's the kind of migration discipline most teams skip, and it's why they end up running two systems in parallel for months.

I run a Next.js App Router site in production (marketing + blog). Build times aren't painful yet, but I've noticed the same pattern: most of the build time is Next.js doing things I didn't ask for. For a mostly-static marketing site it's tolerable, but I can see how it becomes a dealbreaker for a rich client-side app like Railway's dashboard.

Curious — after the migration, did you see any measurable difference in runtime performance (TTFB, hydration) or was the win purely on the build/DX side?