This Week at Zed Industries: #3

May 19th, 2023

This week, we are saying our goodbyes to Petros Amoiridis. You can read about his time at Zed, on his blog. We thank him for his care and contributions and wish him all the success in his future endeavors.

Here's what everyone's been up to this week:


I am wrapping up the changes to the workspace Nathan and I started working on last week. We fleshed out all the logic for docking panels to the left, bottom, or right, and added the ability to zoom any given panel (or pane). This new system feels very intuitive and we're excited to ship it soon. All that's left is persisting in this state so that it can be restored when Zed is re-opened.


This week, I've had the opportunity to expand my skills by learning a bit of raw SQL, a departure from my previous experience of exclusively working with ORMs, to build charts in our new business intelligence stack: Metabase + Clickhouse. Gaining full control over how charts are built and stripping away the confusing layers of abstraction that often come up when using more typical analytics solutions has been quite nice.


Our stability and performance work continued this week. Antonio and I were able to track down a bug that could cause us to ignore changes to a .gitignore file in some rare circumstances. Max and I tag-teamed a performance issue related to editing lots of git-tracked buffers in a multi-buffer at the same time. Finally, by simply updating a dependency I was able to avoid a crash we would have with some kinds of malformed fonts.


Turns out it's my 3rd week at Zed, time flies!

This week was leaning more toward maintenance: I've fixed a bunch of bugs relatively fluently (albeit, they were small) and updated our infrastructure in places to be more convenient and faster for the CLI development I needed at the time.

Two more PRs from the last week, after some maintenance, got merged into main:

Everywhere in Zed (CLI, editor, go to line), supports the file_query:row:column notation, allowing the file finder and CLI to open files at a certain location. I also added initial support for navigation history to the file finder panel, though it's not persistent between Zed restarts yet. It should allow you to quickly access recently visited files in Zed.

Overall, I feel somewhat established in this small editor corner — time to wander deeper, closer to LSP level, and check out which protocol features are still missing in Zed.


I'm working on adding project-specific settings to Zed. As a first step, I reorganized the way that Zed handles settings in general. Previously, all of Zed's settings were declared in one giant struct, in a crate called settings, which was a dependency of almost every other crate in our codebase. This meant that any time we wanted to add or change a setting, we had to recompile almost the entire codebase.

Now, each crate declares its own settings type, and the settings crate just handles loading settings from JSON files. This means that we can change the structure of settings in one crate without recompiling the entire codebase. From here, adding support for project-specific settings shouldn't take long.


I'm finishing off what we're calling 'Git Integration 0.1' this week, by adding git diffs into the scroll bar and discovering the secrets of flame graphs. I've also been bouncing around on a bunch of different projects in parallel. I'm particularly interested in expanding our property tests to cover more of the state space. I've also been reading 'The Power of Proximity' from the economists at the Federal Reserve and wondering how those results might change if they were using Zed's collaborative features...

Next week: fixing all of the new bugs I created when adding git support!


This week has been a mix of ops, smaller projects, and pushing the new theme system forward on Zed. Since I don't have much to share this week, I can elaborate further on that work...

One of our struggles with our current system is having not just a light mode/dark mode but a whole array of different themes, which can be light, dark, or somewhere in the middle. We need a more sophisticated system for dealing with the contrast between elements in themes, ways to dynamically create states for interactive elements that are strong enough to be seen clearly while looking great, and ways to provide greater freedoms into what a theme spec and override in the editor.

I've been working on extending our theme system for the last few weeks, but balancing design on the new features going into Zed and engineering on the theme is difficult. Soon we'll be bringing in someone to help take on the new themes so both of these things can move forward quicker! I'm excited to share more soon.


I'm excited about the clarity I achieved this week for Zed's future, and I've been running up a tab at OpenAI. So pumped for what we have in store to share with everyone this year. I'm looking forward to making the trip from Boulder to speak at CDE Universe in San Francisco on June 1, and I'll be sharing more details then. Thanks for reading!