The first public release was named after the thing it changed: a proxy launcher for one specific application. By version 1.1.0 the public name was Local Route Launcher, and the repository still is not. Both of those facts are deliberate, and the gap between them is the most useful thing I learned from shipping the rename.
Why the old name had to go
It put someone else's trademark in the product name. The tool is independent and unaffiliated; a name that reads like an official companion for another company's application implies a relationship that does not exist, and no disclaimer under the download button fixes a name that already made the claim.
It also described the mechanism instead of the job. The mechanism is “proxy for one app”. The job is “route this launch, and leave the machine alone”. The second one is what the tool actually does, and it is what people search for after they have already given up on the first.
A name is attached to six things
Renaming feels like one decision. In practice it touches six, and they have very different costs:
- The name shown to a person — window title, menus, installer, documentation.
- The file name of the application bundle and the release artefacts.
- The bundle identifier.
- The preferences domain, where saved settings live.
- The repository URL.
- Every link, article, bookmark and search result that already points at any of the above.
Three of those are cheap to change. Three are expensive, and the expense is paid by people who already installed version 1.0.0 and do not read changelogs.
The rule I settled on
Change what is public and cheap. Leave alone what is private and load-bearing.
The name in the interface is public and cheap: change it. The installer file name is public and cheap: change it, and the download page with it.
The bundle identifier is private and load-bearing. Change it and the operating system treats the new build as a different application: the saved settings belong to something that no longer exists, and both copies can be installed side by side without either knowing about the other. For a rename, that is a silent failure. It stayed.
The preferences domain is the same argument with a shorter blast radius: it holds the proxy endpoint and the interface language. It stayed, so an upgrade keeps both.
The repository URL stayed for a third reason. GitHub redirects a renamed repository, so cloning would have survived — but the published project site lives under a path derived from that name, and every external link to a release asset points at the old path. A redirect is a courtesy, not a contract, and it does not cover links other people have already copied.
So the repository keeps the historical name, the application has the new one, and the documentation says once, plainly, that the URL is retained for link continuity while the public name is something else. Having to explain it is the cost. A broken upgrade would have been the alternative.
What the rename actually costs
Search results keep showing the old name for months, because the old name is in every article that was ever written about the project, including the ones I wrote. The repository and the product disagree permanently, which looks like carelessness until someone reads the note. And every document needs one sentence of history that a reader will skip.
None of that is comparable to the cost of telling a user that their settings are gone because the name changed. An identifier that other people's data depends on is a public interface, whether or not it was designed as one.
The general version
This is not really about naming. Any string that someone else's data or links depend on — a bundle identifier, a preferences domain, a database column, a URL path, a JSON key — becomes an interface the moment it ships. Interfaces are migrated, not renamed. You add the new one, keep the old one working, and only remove it when you can see that nothing is using it. For a two-person project the visible cost of keeping an old identifier is one sentence in the docs. The invisible cost of dropping it is somebody's settings.
The rename shipped in a minor version, with one line in the changelog that says the public name changed, the repository links and preference storage stayed compatible, and existing settings carry over. That line is the whole migration plan. It took less time to write than the icon.