We've been considering removing workspace-hack for a couple reasons: - Lukas ran into a situation where its build script seemed to be causing spurious rebuilds. This seems more likely to be a cargo bug than an issue with workspace-hack itself (given that it has an empty build script), but we don't necessarily want to take the time to hunt that down right now. - Marshall mentioned hakari interacts poorly with automated crate updates (in our case provided by rennovate) because you'd need to have `cargo hakari generate && cargo hakari manage-deps` after their changes and we prefer to not have actions that make commits. Currently removing workspace-hack causes our workspace to grow from ~1700 to ~2000 crates being built (depending on platform), which is mainly a problem when you're building the whole workspace or running tests across the the normal and remote binaries (which is where feature-unification nets us the most sharing). It doesn't impact incremental times noticeably when you're just iterating on `-p zed`, and we'll hopefully get these savings back in the future when rust-lang/cargo#14774 (which re-implements the functionality of hakari) is finished. Release Notes: - N/A
Zed Icons
Guidelines
Icons are a big part of Zed, and they're how we convey hundreds of actions without relying on labeled buttons. When introducing a new icon, it's important to ensure consistency with the existing set, which follows these guidelines:
- The SVG view box should be 16x16.
- For outlined icons, use a 1.2px stroke width.
- Not all icons are mathematically aligned; there's quite a bit of optical adjustment. However, try to keep the icon within an internal 12x12 bounding box as much as possible while ensuring proper visibility.
- Use the
filledandoutlinedterminology when introducing icons that will have these two variants. - Icons that are deeply contextual may have the feature context as their name prefix. For example,
ToolWeb,ReplPlay,DebugStepInto, etc. - Avoid complex layer structures in the icon SVG, like clipping masks and similar elements. When the shape becomes too complex, we recommend running the SVG through SVGOMG to clean it up.
Sourcing
Most icons are created by sourcing them from Lucide. Then, they're modified, adjusted, cleaned up, and simplified depending on their use and overall fit with Zed.
Sometimes, we may use other sources like Phosphor, but we also design many icons completely from scratch.
Contributing
To introduce a new icon, add the .svg file to the assets/icon directory and then add its corresponding item to the icons.rs file within the crates directory.
- SVG files in the assets folder follow a snake_case name format.
- Icons in the
icons.rsfile follow the PascalCase name format.
Make sure to tag a member of Zed's design team so we can review and adjust any newly introduced icon.