Meta(
    title: "Bucky smallweb client library",
    summary: Some("A client library for smallweb protocols in Rust, stripped out of GemView"),
    published: Some(Time(
        year: 2023,
        month: 2,
        day: 19,
        hour: 5,
        minute: 28,
        second: 14,
    )),
    tags: [
        "rust",
        "programming",
    ],
)
---
Starting with a bit of background, Eva is a Gemini browser that I've been working on off and on for some time now, written in Rust with the Gtk4 toolkit. Right from the beginning it was designed around a custom browser widget which was packaged separately called GemView, which has grown over time to support not just Gemini but many of the other protocols that are generally grouped together as the "smallweb". That list includes gopher, finger, and spartan. The widget also supports file:// and data:// urls. GemView is a huge part of what makes Eva useful, and the rest is just an interface built around it.

I like modular code within reason, and things which can be reused and repurposed in ways other than originally intended. This also tends to work to one of the ways that Rust's notorious compilation times can be mitigated, as splitting large crates into smaller crates allows them to be compiled in parallel.

At any rate, a while ago I split the entire "scheme" module out of GemView with the intention of packaging it into a separate library called Bucky. Bucky is further subdivided into separate per-protocol crates with one crate devoted to common code. The main library can be used modularly so you can pick and choose which parts to build for your project and don't have to support all of the protocols that Bucky does if you don't want to.

=> https://codeberg.org/jeang3nie/bucky Bucky repo at Codeberg

Not sure if anyone else will ever use this or not, but it is available if you feel like starting your own client project in Rust. There is more work that I need to finish, however.
* Tofu support for gemini
* Client supports for gemini (in progress)
* documentation is lacking in most modules

## The state of Eva
I just pushed the first commit for GemView that uses Bucky rather than the old "scheme" module. Earlier today I pushed an update that brought GemView up to date with the latest Gtk-rs bindings. The next step will be to pull this new version into Eva and update the browser itself to use the newest bindings.

Eva is currently undergoing a transition to using libadwaita. If that turns you off, let me point out that the change has already allowed some great improvements in the ui such as:
* moving the tab bar and some controls into the title bar
* using Adwaita's toast overlay for context messages and alerts about things like finished downloads rather than sending those things as system tray popups

In particular, the first change reduces the size of the interface considerably, allowing for more room to be devoted to content. And content is, after all, the important part.

At any rate, this transition is not entirely complete at this point in time. The browser basically works, but is lacking a preferences dialog. The preferences themselves are going to be stored using Gtk+'s GSchema backend going forward rather than a configuration file. Not all of the options supported in previous versions are going to make their way forward to the next version and this is the part of the interface that's likely to see the most change.