惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

Robert Greiner

The 1% Error That Ruins Everything Believe the Checkbook The Most Expensive Wall in Software The Breaker Box Economy The Experience Upload The Three Infinity Stones That Can Erase Your Company The Server in the Closet Tools Create Capacity, Workflows Create Value The Age of Citation Win the Default, Win the Decade Mise en Place for AI Teams AI Belongs in Your Dev Pipeline, Not Your Product Why Your Enterprise AI Strategy Is Failing The Human Side of AI: Giving People Back Their Time When Products Think For Themselves Don't Wait for January AI Rule #1 - Customer First Navigating the Upside Down as a Technology Leader Call to Adventure
The Internet's Forgotten Superpower
Robert Greiner · 2025-11-03 · via Robert Greiner

When I was eight, my save button was a pencil.

Not the controller. A pencil. And a scrap of paper.

You’d finish a stage in Mega Man 2 and the game would show you a grid. Five rows of dots, each one either empty or filled. You’d copy it down dot by dot, turn off the NES, and come back days later. Enter that same pattern and your world reappeared. All eight robot masters. Every E-tank. Metal Man’s stage half-cleared.

One small grid held your entire state.

You expected it to work. You trusted it.

The web has had this same feature since 1991. We just stopped using it.

What We Broke

A colleague sends you a GitHub link. It doesn’t just open the file. It highlights lines 8 through 15, exactly where the bug lives. You land in the right place, conversation ready to start.

Figma does the same. Click a teammate’s link and you’re on their canvas, same position, sometimes same object selected.

Google Maps puts coordinates right in the URL. A pin isn’t just “coffee shop.” It’s precisely where you were looking.

This isn’t innovation. It’s just the web working as designed.

Then React launched in 2013 and single-page applications became the default. The trade seemed worth it: instant updates, no flicker, that native-app feel.

But the cost was steeper than anyone admitted.

SPAs broke the browser’s most fundamental contract: refresh should restore, not destroy. The back button should remember. A link should mean something.

Instead, we got applications where your filters vanish on reload. Where sharing your screen means sending a link to a useless homepage, then giving verbal directions. Where analytics teams write custom JavaScript to manually fire events every time the URL changes. Except half the time the URL doesn’t change because updating it is “extra work.”

We built save systems that die in RAM.

Why Nobody Does This

It’s easier not to.

Redux launched in 2015 and everyone copied the pattern. State lives in memory, managed by reducers. Tutorials taught this approach. Libraries assumed it. The entire ecosystem optimized around it.

It worked until you hit refresh. Then tutorials would sheepishly mention you’d need to “rehydrate from the server” like it was some minor detail.

The URL sat there, a solved problem we chose to ignore.

Early React Router didn’t even consider the URL a first-class state container. It was decoration. The routing library itself didn’t believe routes should carry data.

And nobody wanted to think about what belongs in a URL. Is it IDs? Filters? View modes? Sort order? The answer is “it depends,” which means you actually have to think about your application.

It’s easier to dump everything in Redux and hope for the best.

The Real Complexity

To be fair, URL state isn’t trivial.

Browsers limit URLs to around 2,000 characters. Try serializing a complex filter object and you’ll hit that ceiling fast. Put sensitive data in URLs and it leaks everywhere: server logs, browser history, analytics tools, shoulder surfers.

Nested objects don’t serialize cleanly. Arrays of objects with their own nested arrays? Good luck making that readable. And if you naively push every state change to the URL, you pollute browser history until the back button becomes unusable.

These are real problems.

But they’re solvable problems. And more importantly, they’re problems worth solving.

The character limit matters for complex queries with dozens of filters. Most applications have three to five. IDs are short. Sort orders and view modes take a few characters. You’re not serializing your entire database.

Sensitive data never belonged in URLs anyway. Authentication tokens go in cookies or headers. PII stays on the server. This isn’t a URL problem, it’s a security boundary you should already have.

Complex objects? Most view state isn’t that complex. When it is, you can use short identifiers that reference server-side state. Stripe does this with their expandable API parameters. Linear does it with saved filters.

History pollution? Use replaceState instead of pushState for transient updates. Problem solved in one line.

The complexity exists. But it’s manageable complexity. The kind engineers solve every day. We just decided it wasn’t worth the effort.

The Test

Durable, user-chosen facts belong in the URL.

If someone set filters, they go in the URL. If they chose a view mode, it goes in the URL. If they navigated to a specific item, its ID goes in the URL.

The test is simple: if someone shares this link, should they see the same thing?

If yes, it belongs in the URL.

Google ships billions of search results. Every one is a URL with your query in it: google.com/search?q=url+state+management

Figma, Linear, Trello. Every design, every issue, every card has an address.

These aren’t clever hacks. They’re examples of what happens when you treat the URL as infrastructure instead of decoration.

What We Gave Up

We chased the native app feel and forgot why the web matters.

Native apps can’t share state with a link. Can’t bookmark a screen. Can’t open three views in separate tabs. The web could do all of this by default. We broke it.

Single-page applications have real benefits. Speed. Smooth transitions. Reactive updates. But those benefits don’t require abandoning the URL as a state container.

You can have instant updates and meaningful addresses. Smooth transitions and working back buttons. The reactive experience and shareable links.

The frameworks that win long-term will be the ones that treat the URL as infrastructure. That make it easy to put state there. That default to meaningful addresses instead of treating them as decoration.

The Web Remembers

The URL has been waiting thirty years to be your save code.

Every application that ignores it is one refresh away from losing your work. One shared link away from confusion. One back button away from frustration.

Your eight-year-old self knew better. Drew that grid. Kept that scrap of paper.

The web gave you something better.

Stop building amnesia into your applications.

How did you like this article?

Enjoyed this article? Subscribe to get weekly insights on AI, technology strategy, and leadership. Completely free.

Subscribe for Free