The sentence it started from
On 2026-10-03, in an On Air talk, Dad named the problem in one line:
나를 기억하지 못하는 브라우저들이라고, 이게.
"These are browsers that don't remember me. That's what this is."
That talk became coop todo #303, and the todo became Voyager, Dad's own web browser. Its architecture document turns the complaint into a thesis: every other browser is built for everyone and therefore knows no one; this one is built for one person and remembers him. The name comes from the probes that left in 1977 and are still flying somewhere no one has been.
This quest walks through how that browser is built. It starts here, before any WebKit, because every engineering choice later on serves this thesis, and you cannot judge a choice without knowing what it was for.
What forgetting costs
A browser built for everyone cannot know which of the sites you visit are yours. So every fact about your own world has to be kept by hand, and anything kept by hand rots. Voyager's house sign lists what that looked like for Dad:
- Thirty pinned tabs and a row of family bookmarks, all maintained by hand.
- A bookmark file that stopped at 14 apps while the family grew to about 45. Nobody decided to stop updating it. Each new app simply needed one more manual step, and the steps stopped happening.
- A permission prompt for his own microphone, on his own machine, the microphone Pippa's voice mode needs.
- Several browsers open at once, because Dad has sites where he needs two accounts at the same time. A browser keeps one set of cookies per profile, so a window shows a site in one account at a time. Chrome and Safari profiles can hold the second account, but each profile opens its own window with its own tabs, so in practice the second account lived in a second browser.
Each item is the same failure seen from a different side. The browser cannot tell Dad's things from a stranger's, so it treats his family apps like any website, his machine like any origin, and his second account like an intruder on the first.
What remembering means here
"Remember" could mean a bigger bookmark file. It does not. In Voyager it means reading each fact from the one place that already owns it, at the moment it is needed.
| Friction | What Voyager does instead | Where this quest teaches it |
|---|---|---|
| Hand-kept pins and bookmarks | Reads Firelink's launch catalog at run time and shows it on a native Home | Family Apps by Name, Trust by Zone |
| A prompt for his own microphone | Grants the microphone and camera without a prompt to the exact family origins it can verify, and still asks every other site | Family Apps by Name, Trust by Zone |
| Several browsers for two accounts | Gives each identity its own isolated WebKit data store, tab by tab, in one window | Several Accounts of One Site, Side by Side |
| Pippa confined to a tab or an extension panel | Pippa herself as a pinned tab, and her panel beside any page | Pippa Built In |
The architecture writes the first row as an invariant: family facts are read, never copied. No list of apps, ports or hosts lives in Voyager's source, settings or documentation. The 14-of-45 file is the reason. A copy starts going stale the day it is made.
The first thing you see
A new tab opens Voyager's native Home, voyager://home, a SwiftUI surface with no web page behind it. At the top, an Open Pippa button. Then account shortcuts, each one a site opened in a chosen identity. Then the family apps, drawn from the catalog with a count and the time it was last read, and a field to find one by name. Then the open tabs of the window.
One honest note before you go further. The architecture says the address field will take a family app's name. That is not built yet. Today, finding a family app by name means typing into that Home field, or on iPhone, tapping the widget. Where the documents run ahead of the code, this quest follows the code and says so.
The bar Dad set
A browser for one person could easily become a small browser: the family things done well, everything else worse than what Dad already had. He ruled that out in the same talk:
불완전한 브라우저를 만들면 안 돼. 크롬 브라우저든지, 사파리 브라우저든지, 코멧이든지, 그거의 수퍼셋이어야 하는 거지, 섭셋이면 안 되는 거야.
"You can't build an incomplete browser. Whether it's Chrome, Safari or Comet, it has to be a superset of them. A subset won't do."
And he said what success would look like:
우리 브라우저가 너무 좋아서 Comet이나 Chrome으로 돌아갈 일이 없어야 하는 거지.
"Our browser should be so good that there's never a reason to go back to Comet or Chrome."
So the success test is behavioural and has one line: Dad never reopens another browser. Rekindle, Dad's prose editor, met the same kind of standard against Bear and Sublime Text. A test like that cannot be passed by a feature list. It needs an instrument, and Voyager's instrument is the departure log: every time another browser comes to the front, Voyager writes it down. An empty log over the window Dad agrees to is what done means. The last two lessons of this track take that log apart.
Small core first, then the whole basic browser
Dad's order for the project was a plan session, then a small usable core, then growth toward the superset. The plan session ran that same night and changed the engine; the next track tells that story. Once the first brick existed, Dad pushed further the same day:
조금조금 하지말고 기본적인 브라우져 기능은 (comet 기준) 필수적으로 다 구현하고 테스트해. prototype v1 이 목표야. 그러고 나서 다듬어.
"Don't do it bit by bit. Implement and test every basic browser feature, by Comet's standard. Prototype v1 is the goal. Polish after that."
That is why the v1 prototype brought history, bookmarks, suggestions, private windows and identities within the same day. A superset bar and a departure log make a half-browser expensive in a measurable way: every missing basic is another trip back to Comet, and every trip is a row in the log.