Rendered at 21:57:47 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
trnvll 49 minutes ago [-]
Damn, projects like these really spark my curiosity about Rust. I guess it's time to try it out, fomo is getting too big haha
canadiantim 10 minutes ago [-]
This looks amazing, really appreciate your minimal JavaScript approach. I’ll definitely try it out, could see myself potentially doing pro version in future.
egeozcan 4 hours ago [-]
Very cool idea, I'm going to test this!
One nit: Forgive me if I'm missing something but why do you have pro components? Won't people vibe-code clones anyway? I'd rather have a donate button these days.
burnrate 3 hours ago [-]
Hey! Author of Proa here, thanks for checking it out! The idea is to just accelerate the time it takes to create components, similar to Shadcn or other component libraries. You can create a new component and modify them however you like. It’s nice because they have both the WebRender and MdRender trait implemented, and saves you a bit of time. Also for slightly more complex components like Calendar, we’ve crafted the component with all the JS interactivity required to do things like switch months, select start and end date, etc
DrammBA 2 hours ago [-]
You answered "Why do you have a component library?" but I think the original question was more along the lines of "Why bother monetizing components that can be copyright-washed in minutes with LLMs instead of having a Donations funnel?"
skrtskrt 2 hours ago [-]
In any corporate structure it's 10000x easier to get approved to just buy something from a vendor than it is to set up donations for an open-source project/foundation.
PLus you're missing the licensing aspect, part of this is AGPL if you use the free version, lots of places are happy to throw down money to get a commercial license rather than hem and haw over AGPL.
killingtime74 2 hours ago [-]
Aren't Pro components the same as a donation, but then giving you something extra as well.
DrammBA 1 hours ago [-]
Kind of, not really, in this case it's a subscription that renews monthly/yearly so you have to remember to cancel it when your reach the amount you wanted to donate, maybe you didn't want to donate as much as 1 month costs so you're left not sending them any money in the end, right now you can't even subscribe cause their console 404's. You got to make it as easy as possible for people to part with their money, component library subscription is not it.
kianN 4 hours ago [-]
This looks really cool! I’ve been really appreciating the revival of old-school server side rendering and foundational web components, but with modern tools or approaches.
burnrate 3 hours ago [-]
That's very kind of you, appreciate it man! Thanks!
airstrike 4 hours ago [-]
Why does `fn render` need to borrow WebContext mutably?
burnrate 3 hours ago [-]
Hey great question! WebContext owns an output buffer (i.e., RenderBuffer) that components write HTML into directly, avoiding intermediate allocations and copying. It needs to be mutable for this reason. This is one of the key ways we're able to make Proa the fastest server-side rendering engine on the market.
By default, WebContext composes RenderBuffer (but it can be overriden via generics) which uses fixed-size 4 KiB pages. When a page runs out of room, it adds another page without moving the HTML already written. This avoids copying the accumulated output during growth! Its designed to be a performance improvement over Vec<u8>
For context, the problem with Vec<u8> is that every time a vector reaches maximum capacity, it has to reallocate a new area of memory (typically 2x larger than the previous allocation) and then copy everything into that new buffer. This adds a ton of overhead, especially if you're writing large pages.
Can I get a TLDR of why Proa is seemingly so much faster tha existing Rust web frameworks (Dioxus, Leptos, Topcoat)?
burnrate 2 hours ago [-]
I can't speak for the others as I am not as familiar with how they're engineered, but with Proa I spent a painstaking amount of time to try and move as much of the work to compile time as possible and being really careful about how memory is allocated. And a lot of those small improvements add up over time!
One nit: Forgive me if I'm missing something but why do you have pro components? Won't people vibe-code clones anyway? I'd rather have a donate button these days.
PLus you're missing the licensing aspect, part of this is AGPL if you use the free version, lots of places are happy to throw down money to get a commercial license rather than hem and haw over AGPL.
By default, WebContext composes RenderBuffer (but it can be overriden via generics) which uses fixed-size 4 KiB pages. When a page runs out of room, it adds another page without moving the HTML already written. This avoids copying the accumulated output during growth! Its designed to be a performance improvement over Vec<u8>
For context, the problem with Vec<u8> is that every time a vector reaches maximum capacity, it has to reallocate a new area of memory (typically 2x larger than the previous allocation) and then copy everything into that new buffer. This adds a ton of overhead, especially if you're writing large pages.
Checkout https://github.com/Proa-Labs/proa/blob/384136f87fc9f91747477... if you're curious about RenderBuffer's design