Pure frontend is vanishing 🫠
"The front provides a user-friendly interface, while the back handles data storage and business logic."
It's not like this anymore. As client APIs evolve, data storage and business logic is key also on the frontend (it's called local-first at its extreme).
Your role as frontend developer is about to change as well 👇
"Traditional" frontend
At the extreme "front" of the stack, you as developer handle UI components, animations, design systems implementation.
This job is about to disappear:
- Libraries like
shadcn
, React Aria, Radix UI provide headless components - AI tools provide mocks of UIs from text (and they are getting better)
prompt: "clone new york times website"
You may still be involved in some details, but "pure UI" is not something tasked to a frontend developer anymore (soon).
(Server) State management
Second role: fetch and display server data.
Storage and business logic belong to the backend, and your role as frontend developer is requesting data and placing it in the right place on the UI.
Then you also need to make requests to update this data, but the update logic is still all backend.
UI + State management have always been the major concerns of anything frontend 🤔
Power to the client
But the client is not just UI anymore.
Next.js, SvelteKit, Nuxt... all of the big full-stack frameworks of the last 10 years have made the same exact bet on coupling server+client into a single isomorphic architecture... Now client-side SPAs are making a comeback and they can't adapt. Expect to see more of this.
How long do you guys think it will take me to move T3 Chat from Next to Hono+Vite? Considering giving it a shot tonight
Web APIs bring everything that was traditionally "server" to the client. Why this come back to the client? 🤔
Both User and Developer experience skyrocket when the data lives on the user device.
Local-first data management will fuel this even more!
This innocuous shift of storage on the client moves the complexity on the frontend, and Web APIs already has everything built-in:
- Schemas on the client (IndexedDB, Pglite, SQLite)
- Reactive data updates ("live queries")
- Background syncing (Workers)
In this context, client routing libraries are the new stars (TanStack Router, React Router) ✨
TanStack Router is the library you have to try in 2025 ✨ And TanStack Start if you are looking for a full framework with TanStack Router
📣 We just shipped a non-breaking Scroll Restoration update for @Tan_Stack Start AND Router. Make sure you have it turned on and you'll get consistent scroll restoration, hash jumping, and top-of-page resets for window and scrollable divs in both client only and SSR/Start. 🎉
Moving full stack with syncing
If apps work completely on the client, is there even a need of a server? 🤔
A server is necessary to propagate data between clients.
The backend assumes the simple role of "support" and "coordination". Also called syncing.
User enjoys fast experience and data ownership on his own device (with offline support). But eventually the user wants to share the same data on another device (or with a collaborator).
That's when a connection is created to the server, which acts as a "bridge" and "backup".
A sync engine takes changes from a client, figures out how to converge all changes to a consistent state, and sends back the new final state to all connected clients ⚡️
That's the basic. Then it tends to get a little more complex with scale:
I am working on something like this myself 🤫
No major releases this week as I am collecting some major insights on local-first and sync engines.
Working on my talk for Effect Days 2025 as well. You don't want to miss that 🪄
See you next 👋