4 ms·
Author here: This project is incredibly buggy and immature at this point and not really intended to be run yet. I am blown away by the reception. Notes for peo
by mgrandl 3y ago
Author here: This project is incredibly buggy and immature at this point and not really intended to be run yet. I am blown away by the reception.
Notes for people trying to run this:
- it is MacOS only
- the window bounds are hardcoded for my system, because GPUI lacks a way to center a fixed size window
- the accessibility is pretty much non-existent. GPUI doesn’t provide an accessible text input yet, so this is a hacky minimal implementation.
If there are any questions about this project or developing with GPUI, feel free to ask!
- yjftsjthsd-h 3y agoI appreciate you adding the caveats section to the README:) It's nice to clarify those things up front
- mgrandl 3y agoJup for sure. To be honest I didn’t intend for this to get posted yet. Just wanted to show it to the Zed team because they expressed interest.
- osener 3y agoNice project! How was your experience building with GPUI? How does it compare to other native GUI libs, if you’ve used any?
- mgrandl 3y agoThank you! I have mostly worked on web apps before this. I built the same app with Tauri before deciding to move to GPUI and a pure rust UI. Pros: - GPUI is heavily inspired by Tailwind, which made me productive pretty quickly. - I love the tight coupling between the Rust structs and the rendering. Makes for nice and reusable components similar to Svelte. - It's obviously purpose built for performance/latency and it shows. I haven't optimized Loungy at all, but it feels way smoother than the previous Tauri version. Cons: - GPUI is very obviously still in it's infancy. There isn't even a text input! - There is no animation system. This is a huge drawback compared to CSS/Svelte - There is no global hotkey API like in Tauri. But I could just take the hotkey crate by the Tauri guys and make it work for GPUI.
- rane 3y ago> Initially I wrote it using Tauri as I am familiar with web technologies, but quickly got fed up with moving info from rust side to the webview Could you elaborate on this part? As I recall, communication between webview and the node.js backend was my main gripe with Electron as well. Sounds like it hasn't been solved in Tauri.
- mgrandl 3y agoI mean it's fine for the most part, but I had to serialize/deserialize a lot because I wanted to keep all the business logic in Rust. Also there was some very noticable latency after serializing in Rust -> moving state to the Webview. However I am not ruling out that I just failed to follow Tauri best practices.
- deleted 3y ago[deleted]
- danpalmer 3y agoA different question, what was it about Raycast's extension model that frustrated you enough that you built this? I've authored/contributed to quite a few extensions at this point, and have had a remarkably good experience with it.
- Ezhik 3y agoHaving tried both Alfred and Raycast, I prefer Alfred since I can create custom searches without having to setup an entire new extension - all it takes is creating a shell command that can return JSON in a specific format.
- mgrandl 3y agoI agree for 99% of extensions their model is amazing. And I wouldn't expect me to come up with a better one any time soon. The problem is that I want to do more in my launcher. Two examples: - I wasn't happy with the official bitwarden extension, because going through the clipboard and copy/pasting individual items felt cumbersome. They also only supported one vault even though I asked about this years ago [0]! In raycast I wrote my own bitwarden extension that hooked into Hammerspoon and used the AX spoon to autofill credentials. That felt very hacky though so in my own launcher I am using the accessibility API directly through swift-rs. - I wanted to build my own keyboard centric matrix chat client into raycast. I got pretty far, but in the end I was just too limited by the available components. Also I discovered that once your extensions heap reaches 100 MiB, it just gets killed. That basically made it impossible to just load the matrix-sdk including crypto. In the end I just didn't want to keep investing time in some proprietary software that doesn't allow me to do what I want to do :) [0] https://github.com/raycast/extensions/issues/1544 https://github.com/raycast/extensions/issues/1544