This Week at Zed Industries: #10
This was a much quieter week with several holidays and a few vacations, yet our work continues to march forward so let's take a look at what we did this week!
Most of this week was spent working on the collaboration UI – Both design & code. It feels really great to be able to call natively in Zed. You never really think about how much of a pain it is to tab to another app to mute!
There are still a few things to do before it feels really excellent, like we'll need ot figure out a solution for background noise reduction, swapping audio sources in the UI, etc. But for now it is quite serviceable and we've started using it for all our Zed meetings. Let us know your impressions so far.
Otherwise, I spent a lot of the last week and a half deep in the theme code. Despite it being written in TypeScript we decided to move the entire codebase to
snake_case to better align with the Rust app. It is super nice to be able to search for something and get both Rust and TypeScript matches now. There were a number of other changes under the hood to enable further work on the dynamic intensity/contrast system we've been working on.
I came back from my pairing time with Nathan here in Italy. We had a blast working together and I am just so excited for Zed's future.
In other news, after shipping the assistant last week, I spent some more time this week working on fixing some problems we noticed after the release. I also helped fixing some longstanding GPUI bug that was incorrectly tracking the mouse state, as well as working on improving our Vim support.
A crash we have been seeing oddly frequently is one where we have multiple instances running at once, competing over local database access. We use this database for lots of things from your recent projects list to your layout of open panels for workspace restoration. As macOS applications generally only ever have a single instance with some number of windows, our code for interacting with this database assumed it has sole access, which falls apart pretty quickly if another instance somehow gets launched.
We could refactor that code to handle coordinating access with another instance but that would be a lot of engineering work which would still have questionable correctness. The solution we settled on is to look for an existing instance via a network socket on startup, exiting early if we can confirm we already have an instance running. A mechanism like this would have been required once we go multi-platform anyway so this seems to be a rather convenient solution!
Worked throughout most of this week, hardening the semantic indexing engine prior to our (hopeful) merge next week. Notably, we've set reindexing up (so the index is consistently kept up to date), accomodated for edge cases and intermediate failures, and expanded language support. It's running really smoothly, and im excited to get it out soon.
Beyond that, I've begun scoping out the next stage of this work, diving into recent AI research.
This week, I have gotten a project & branch switcher across the finish line. In the process I've cooperated with Antonio to adjust GPUI on click's element propagation, as both project & branch switcher interacted in funny ways with the project panel located underneath them.
I also added search marks in a scrollbar, a feature long requested by Kirill. Next week, I plan to polish switchers to make them nice and push collaboration UI forward. I plan to look into addressing community requests for language support too.
Quite enjoyable to take a few steps back from that single topic I was occupied with for a month, and do something much smaller.
I am still occupied by inlays, mostly by writing the blogpost draft and addressing overlooked issues, but surprisingly enough, so far those were also small and easy to fix.
The most notable other things were finding a way to allow suppresing certain keybindings and fixing an extra
} appearing due to LSP and our logic interleaving.
Piotr did a great job bringing the search marks in the scrollbar to Zed, inspiring me to look more into similar small lacking things or daily pains. I'd keep a low profile another week if things allow and get more of these improved, let's see if postfix completions could be the one to start with.
Voice chat has been enabled on stable! Yay! As mentioned above, this week has been pretty slow. Just tinkering with voice chat and planning out the next steps for our livestreaming feature.