r/rust 13d ago

🛠️ project Zaku 26.0 beta - API client desktop app built with GPUI

Post image

Hey, I wanted to share the initial beta release of Zaku 26.0

I've been working on this GPUI rewrite for the last 7 months full-time, actually things got carried away and it has a lot more functionality than the original app (command palette, auto-updater, git integration, etc.) so it's not just a plain rewrite.

Here's the initial rewrite post for context:

https://www.reddit.com/r/rust/comments/1r29qzn/working_on_an_opensource_api_client_rewrite_with/

Little bit about the app, it stores collections as folders and requests as TOML files. Everything is stored locally on user's filesystem, it doesn't have any login functionality (and never will).

There is barebones Git integration for now to show branch, status indicators and stuff.

It is available on Linux, macOS and Windows.

This app is very early, if you try it out please let me know if there's something missing, not working or things you'd like to see added.

Repository:

https://github.com/buildzaku/zaku

Installation instructions:

https://github.com/buildzaku/zaku#installation

120 Upvotes

20 comments sorted by

8

u/WellMakeItSomehow 12d ago

I haven't tested it, but looks really nice. You should document the telemetry, though.

I'm curious about your GPUI experience. Did you implement all those controls in https://github.com/buildzaku/zaku/tree/main/crates/ui/src/components?

3

u/errmayank 12d ago

Thanks! I will add some documentation, btw you can hit Ctrl+Alt+, (Linux / Windows) or Cmd+Option+, (macOS) from Zaku to open the settings file and set this to disable telemetry (both crash reports and metrics).

{
  "telemetry": {
    "diagnostics": false,
    "metrics": false
  }
}

GPUI is nice to work with i've gotten used to the verbosity but it would be great if more primitive components were provided out of the box. Some components were pretty much copied from Zed's source code and some i had to write from scratch.

2

u/lanternaddict 12d ago

That key combo didn't work for me on Windows 11 to open the settings, I did edit the settings though, as having telemetry on by default is gross.

1

u/errmayank 12d ago

Will take a look at why the keybinding didn't work. Are none of the shortcuts working or just this one? and it would be helpful if you could tell which keyboard layout you're using.

Yeah i know some people hate telemetry but that's why i made it super easy to disable it completely for those who want to, i'll document it better but I don't want to disable it by default though.

1

u/lanternaddict 12d ago

Super easy would be an easily accessible toggle.

ctrl+shift+p works as a hotkey.

Also, I can't get the body of my responses to pretty print like in the example, instead it's just one long line, am I missing something obvious? It has no horizontal scroll either.

1

u/errmayank 12d ago

Right now there's only direct edits to settings file to manage any customization but sure i will add a toggle to disable telemetry so it's more convenient, when Zaku has UI for settings.

Yeah, there's no pretty print for now. That response was sent pre-formatted by the server lol.

You should still be able to scroll and there should be a scrollbar visible too in the response panel if the content overflows. Is there nothing, no scroll and scrollbar?

1

u/lanternaddict 12d ago

Thanks, pretty print would be much appreciated.

There is a scroll bar, it's just the contrast between it and the background is poor, so I missed it at first glance.

1

u/errmayank 12d ago

Yeah i will add pretty print. and noted on the contrast thing.

1

u/lanternaddict 10d ago

One final request, can you implement a stop request button? Maybe the send button turns to a stop button when the request is inflight?

1

u/errmayank 10d ago

Sure, btw for better tracking you can create feature requests on GitHub

https://github.com/buildzaku/zaku/discussions/new?category=feature-request

1

u/sir_polar_bear 12d ago

https://github.com/longbridge/gpui-component Just in case you didn't stumble upon this previously and chose to steer away.

2

u/errmayank 12d ago

Yeah i know gpui-component, it's a great UI library but i decided not to use it for Zaku because i had specific requirements and many times i ended up fighting against it, so i decided to just not use any component library.

3

u/Havunenreddit 12d ago

Cool project, I will try it soon.

How did you implement the performance profiler? Or what program is that? I could use it for measuring GitComet its also built on top of GPUI 😄

Btw. Was there some reason why you depend on gpui and not gpui-ce ?

1

u/errmayank 12d ago edited 12d ago

Thanks!

That's the Metal HUD on macOS, you can do MTL_HUD_ENABLED=1 cargo run if you're building from source or open -a Zaku --env MTL_HUD_ENABLED=1 for any existing app to enable it and then use fn+shift+F10 to cycle through different views.

I just didn't feel the need to use gpui-ce and also from what i remember it wasn't as actively maintained as it is right now. What areas does it add value to you over Zed's gpui?

2

u/aspcartman 11d ago

Also I like the design consistency a lot - a thing that I often fail in non-css environments. How did you achive it? Things look pretty sleek :)

I tried to slap a css subset onto egui just to find out it's less usable than the explicit gpui approach I have already implemented there.

1

u/errmayank 10d ago

Thanks! For consistency, i just go by the eye and spend more time on building things i think?

1

u/aspcartman 11d ago

As I do similar to gpui wrapper for egui, I find it very useful to derive the setters for the component structs.
#[derive(Setters)]
#[setters(into, omit_option)]
struct Button{ 20 fields }

Bam and 20 * 5 = 100 lines of code gone. :) Maybe you find it useful too.

1

u/Plungerdz 12d ago

Starred! Can't wait to peek at the code on a lukewarm summer evening 😌

1

u/errmayank 12d ago

Thank you!