-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Improve LSP Install UX #2101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve LSP Install UX #2101
Conversation
Looks great! I wonder if we don't open this details sheet by default. Maybe it can be opened during/after installation for more details? We would still show simple progress similar to installing an app from the App Store. What are your thoughts? |
That's a great idea. Then does the 'install' button change to a 'details' button? |
Or is it "Install" to a second "Install" button in the details page |
@austincondiff thoughts on this UI/UX? I like the implied confirm step after clicking install, and the chance to show a little more information before installing. Screen.Recording.2025-08-18.at.1.46.07.PM.mov |
In my opinion it is too disruptive. Imagine the use-case. User comes in and thinks, "I use JavaScript, TypeScript, Rust, Python, and Swift." Option A (the on in your video)
OR Option B
If the user cares to see more details, they can click the circle "i" symbol next to the install button. Maybe this info icon is there regardless of whether install has started or not. That way users can get more details before installing. Similar to the App Store. |
That sounds like a good compromise. Install button initiates install immediately, info button presents the same view but doesn't start installing. |
Well wait, to be fair we're still forcing the longer UX because we want to make sure we're not running willy nilly running commands on the user's machine. So no matter what the UX is this for each language.
|
Also a heads up, we may want to fork the mason repository in the future or see if they'd be interested in extending it. Right now there's no way to indicate that a package could be found on a user's machine without installing. Swift and Rust are good cases of that, where the language bundles the server executable in the tooling. For that reason Swift isn't in the Mason registry (you can't really install SourceKitLSP without the Swift toolchain) |
@thecoolwinter I think user interfaces should be as seamless and non-disruptive as possible, so users can move through them freely. A good example is how Apple handles autosave, apps don’t constantly prompt users to save manually, and if you want to rename or move a file, you just click the title bar. It keeps the experience smooth unless there’s a real risk of data loss. In our case, clicking “Install” already signals intent. If we need more input from the user, maybe a lightweight notification would be a better alternative than interrupting them with a full dialog. We should only disrupt the user when absolutely necessary. That said, if the user is installing language servers from the Settings window, they might not see notifications, since those only show up over workspaces. In that case, maybe we show an exclamation mark symbol next to any item that needs attention in place of the circular progress indicator. Clicking it could open the details sheet so the user can take action. That way, we still respect the user’s flow but provide a clear, unobtrusive way for them to follow up when needed. In addition, if the user installs the language server from a workspace after opening a corresponding file, we could show a notification if user input is needed. |
I'm with you there 100%. For this case, we'd discussed the security implications of this install process and how we wanted to add just enough grit into the UX to make it a little safer. I think you're right that this goes a little too far but we need to discuss it.
On this in particular, we've heard from people who are uncomfortable with the UX of Zed. In that app an install just goes ahead and installs something with no user interaction besides the 'install' click. I agree that the install click signals intent, but we need to remember we're doing a lot more than that with this flow. We're running an otherwise completely invisible command on the user's machine and installing and running a program that we haven't vetted beyond the mason registry's vetting. So that's where I think I went too far, I'm thinking from that POV. I think we can agree that what's on main right now is too little in terms of transparency, and what this is is too rough in terms of UX.
This is where I got held up too. I hadn't come up with a good way to make the whole thing flow. The other issue is that the install can take anywhere from 1-2 seconds to a minute depending on what the package is. Maybe a way to make it work would be to show the install page as an 'info' page, and instead of a cancel button it's named differently to indicate the user can leave while installing is happening. This might be a longer discussion. I think let's merge this with the knowledge that the UX needs updating but also knowing it should help with getting some bug fixes out and make the install process transparent. Also because it's getting large and I think the UX we're going to come up with will require another rework of the UI components here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree, lets create an issue with this context so we can come back to it later on. Approved.
Xcode has a small window similar to the Finder copy window to install external resources for whatever that is worth. |
Description
Implements an installing progress view for language servers from the mason registry.
Related Issues
Checklist
Screenshots
Screen.Recording.2025-08-18.at.2.16.53.PM.mov