Return to Form?

πŸ“… 2024-08-27

🏷 Lagrange, GmCapsule, Bubble

A mug of tea and a Digestive biscuit in hand, I sit to jot down some notes about what I've been doing and thinking about recently.

First off, Lagrange v1.18 has been in the cooker for a few months, slowly but surely getting new improvements. For now I'm focusing on the desktop release, with the headlining features β€” so far, at least β€” being the official TUI variant and support for sending Misfin messages.

When it comes to the former, TUI has been something I've wanted to do properly for a long time, afforded by the use of my custom GUI toolkit: the same code can run virtually unmodified on a text-based canvas instead of a graphical one β€” a feat that few applications can boast about. The huge benefit is obviously that with the TUI you can run Lagrange in a terminal, even remotely over SSH. It's a significant expansion of the environments where the app can run. In fact, it's hard to come up with additional platforms that would make sense, now.

The latter feature, Misfin, is more experimental by virtue of the protocol in question being young and still in development. If you're unfamiliar, the idea is β€” roughly speaking β€” reimagining SMTP in the style of Gemini. Sender and recipient identification and authentication are done using TLS client certificates, which should make the system a whole lot more secure than regular email: spoofing a sender identity is basically impossible, and you can apply TOFU and CA verification on senders and recipients to have more assurance of the identities. And of course, the transmissions are end-to-end encrypted thanks to them being regular TLS connections, just like Gemini. When it comes to Lagrange, in v1.18 you can import Misfin identity certificates and use those to send messages. "misfin://" URIs are also supported in a "mailto:"-like way; much nicer than mucking about with command line tools, say. You will still need to have a valid Misfin mailbox on some server, because recipients generally likely refuse to accept messages from addresses that cannot themselves receive a message in response.

Now the question is, what is the scope for v1.18? How much more stuff can I fit in this bad boy (*slaps roof*)? My todo list still seems to have a large number of nice-to-haves, but I'm mindful that v1.17 was released almost a year ago. For several reasons, it would be good to have smaller releases happening more often than big ones infrequently. I'm likely to proceed to release prep soon for v1.18 and not add any further new features. There are a few loose ends in the TUI code, IIRC, so the prep may actually take some time.

Moving on to other projects, GmCapsule has also seen some improvements lately. It is related to a smaller Titan feature in Lagrange v1.18: implementation of the Titan "edit" parameter, based on a proposal that was discussed a year ago. GmCapsule actually had a buggy handling of Titan parameters in general; now it is more diligent about requiring them to be valid. Briefly, the "edit" parameter in a Titan URL instructs the server to (possibly) lock the resource for editing and send the client the current contents of the resource. The client can then modify the contents and submit them back to the server, which will release the edit lock. This streamlines the entire process of editing text over Titan: you just click on a "titan://...;edit" link, the upload editor opens with the contents, and you upload the text when done. This solves the issue that the old "Edit Page with Titan" feature has: because the page being edited is a regular Gemini page, it may contain UI links and other content that is not supposed to be edited. With the "edit" parameter, the server knows to send just the actual contents of the resource, without any chrome. GmCapsule now understands the "edit" parameter and includes a flag for handlers so they'll know if the request was a Titan edit request.

Thanks to this GmCapsule update, Bubble was already updated to support editing via Titan. You may have noticed my brief post about this in s/meta on BBS. I find it really improves the experience of editing posts. It was also really simple to implement because I already had the "raw-segment" entrypoint in place, which has been meant for "Edit Page with Titan". (The raw segment view continues to be hidden behind an edit prompt special command.)

GmCapsule was also improved to (finally!) support virtual hosts that use their own TLS certificates. Previously all virtual hosts had to share the same certificate β€” an awkward arrangement. At the code level, the solution is to create multiple SSL contexts, one for each virtual host having their own certificate, and use an OpenSSL callback to select the correct context depending on the incoming connection's SNI server name.

Misfin support was also added to GmCapsule in the form of an extension that acts as a Misfin server that forwards received messages to the configured email address. This is a low-stakes way of being able to use Misfin: instead of setting up a full-fledged Misfin mailbox and the surrounding infrastructure, you can rely on your existing email account to store the messages. It's nice to be notified of arriving Misfin messages on my phone, for example. Not really the approach for a Misfin purist, but when paired with Lagrange's ability to send messages it is simple and pragmatic enough.

So, I've actually managed to get quite a few things done in August. Perhaps the summer lull is finally over? The kids will undoubtedly start getting sick again with various viruses as we move into the fall, which will eat up my available time, but I choose to remain optimistic.

CC-BY-SA 4.0

The original Gemtext version of this page can be accessed with a Gemini client: gemini://skyjake.fi/gemlog/2024-08_return-to-form.gmi