Zed Weekly: #19

September 11th, 2023


The last few weeks have been a bit slow while I recover from some personal stuff. So this week I decided to work on something that was a little more bounded: turning our tree of channels into a proper Directed Acyclic Graph (DAG) to enable 'move', 'link', and 'unlink' commands. Adding the necessary operations to our server was pretty straightforward, but the collaboration panel needed some refactoring to support a single channel being rendered in multiple places. Unfortunately, I ran into a snag while polishing this feature for release: root nodes. Due to some quirks in how we represented this state, it's made moving and linking/unlinking these nodes a bit more complicated than I expected. Hopefully, I'll have this sorted out by Wednesday so we can ship it in the next release :D


I'm still working on a substantial revamp of GPUI's approach to the layout and styling of elements. The taffy layout engine has been great so far, and the new system has evolved enough for our designer Nate to start producting some pretty substantial interfaces directly in Rust. Producing UI in the previous element system has been a bottleneck for us, so I'm very excited to get this over the line and start converting everything to it.


Exploration days are now over, and I focus more on certain projects now. Currently, working on prettier integration, it only starts to mature and not closing any time soon, so expect at least another weekly post about it from me.

I've upstreamed all rust-analyzer inlay hint improvements, and now every editor including Zed can enjoy much smaller inlay hint payloads and requests in general. Also, I've found a nasty bug with inlay hint highlighting that causes a panic — working on a fix and tests right now.


Vim emulation proceeds! The main change this week was making . to replay work, which should ship in Preview on Wednesday. The other productive detour has been trying to make non-US keyboards work better with Zed's keyboard shortcut system, which should now be better (but I'm sure there are still edge cases we miss). Excitingly, we've also begun looking at what it would take to make : open the command palette in a sensible way – stay tuned!


This week was one of the most substantial weeks for reliability for the semantic index. While we still have a few pieces outstanding, the engine is starting to reach a production ready state. Beyond this, I've spent some time exploring a strategy for retrieval/reranking specifically focused on reducing our token usage, removing our reliance on large context window models, and improving our flexibility towards implementing our own proprietary or open source models. This initial exploration has been pretty successful, with an expected reduction in database size by about 57% and a reduction in token usage by 37%. So as our engine reaches maturity, I've begun looking beyond this fundamental piece of our AI infrastructure into v2 and further usage throughout the app.


Kyle and I collaborated on redesigning a few substantial pieces of the semantic index to improve its reliability. These improvements landed on preview last week, so I decided to switch gears for a few days to rework the auto-indentation logic for the inline assistant, as we can't quite rely on GPT to do the right thing in all circumstances.


Now that our basic Tailwind support has shipped in Preview I've turned my attention to making it less basic. An important component of using Tailwind is knowing the specifics of what each Tailwind class actually does. To avoid keeping the Tailwind docs open constantly while working you can instead use auto-complete documentation to see the relevant information in-editor as you select an auto-complete item.

The sticking point? We don't support auto-complete documentation, at least not yet that is. With a bit of a kludge I had a basic example up and running in about half an hour but getting it ready to ship will take a bit more time.